Ste*_*nov 8 .net c# struct value-type
struct SomeStruct
{
public int Num { get; set; }
}
class Program
{
static Action action;
static void Foo()
{
SomeStruct someStruct = new SomeStruct { Num = 5 };
action = () => Console.WriteLine(someStruct.Num);
}
static void Main()
{
Foo();
action.Invoke();
}
}
Run Code Online (Sandbox Code Playgroud)
该标准的引文将不胜感激.任何相关的在线文章也是如此.
没有副本.Lambdas捕获变量,而不是值.
您可以使用Reflector查看编译代码:编译器将"someStruct"变量移动到辅助类中.
private static void Foo()
{
DisplayClass locals = new DisplayClass();
locals.someStruct = new SomeStruct { Num = 5 };
action = new Action(locals.b__1);
}
private sealed class DisplayClass
{
// Fields
public SomeStruct someStruct;
// Methods
public void b__1()
{
Console.WriteLine(this.someStruct.Num);
}
}
Run Code Online (Sandbox Code Playgroud)
复制结构永远不会导致用户定义的代码运行,因此您无法真正检查它.实际上,代码将在分配给"someStruct"变量时进行复制.即使对于没有任何lambdas的局部变量,它也会这样做.