Lambda表达式中的引用传递
Lambda表达式中是不予许使用out和Ref的,但是我们可以使用lambda表达式的一些特性来达到同样的效果
static void Main(string[] args)
{
var testObject = new A() { Name = "A" };
RefObjectTestMethod(testObject, ()=>
{
testObject = new A() { Name = "B" };
});
Console.WriteLine(testObject.Name);
Console.ReadLine();
}
public delegate void WrapCode();
public static void RefObjectTestMethod(A test, WrapCode wrapcode)
{
wrapcode();
Console.WriteLine(test.Name);
}
上面代码片段中将会输入
A
B
原因就在于lambda表达式中的testObject是main方法中的testObject对象本身,而非指向testObject的指针,所以当执行lambda表达式的委托时,main方法中的testObject对象的指针位置发生了改变。
RefObjectTestMethod方法传递的参数test由于是testObject对象没有进行重新赋值之前的指针地址,所以在方法RefObjectTestMethod中会输入A,而在主方法中会输入B