在C#中,如果要在lambda表達式中使用外部變量,可以通過捕獲變量的方式來實現。有兩種方式可以捕獲變量:
1.使用引用捕獲:在lambda表達式中使用外部變量時,會以引用的方式來捕獲變量。這意味著,如果在lambda表達式外部修改了變量的值,那么在lambda表達式中也會反映出來。
int x = 10;
Action action = () => Console.WriteLine(x);
x = 20;
action(); // 輸出結果為20
2.使用值捕獲:在lambda表達式中使用外部變量時,會以值的方式來捕獲變量的當前值。這意味著,如果在lambda表達式外部修改了變量的值,那么在lambda表達式中不會受到影響。
int x = 10;
Action action = () =>
{
int y = x;
Console.WriteLine(y);
};
x = 20;
action(); // 輸出結果為10
需要注意的是,對于引用類型的變量,無論是使用引用捕獲還是值捕獲,都會捕獲變量的引用。這意味著,如果在lambda表達式中修改了引用類型變量的屬性或字段,會影響到原始變量。
List<int> numbers = new List<int> { 1, 2, 3 };
Action action = () =>
{
numbers.Add(4);
Console.WriteLine(numbers.Count);
};
action(); // 輸出結果為4
Console.WriteLine(numbers.Count); // 輸出結果為4
綜上所述,使用外部變量的lambda表達式可以通過引用捕獲或值捕獲來實現,具體取決于變量的類型和需求。