在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表达式可以通过引用捕获或值捕获来实现,具体取决于变量的类型和需求。