C#:匿名变量的内存分配

Tho*_*eld 3 c# anonymous-types

我对匿名类型变量的memmory分配有疑问.

如果我声明一个int Vaiable_Name它将分配的变量4 bytes

但是如果Anonymous types,将会发生什么,以及什么时候内存将被解除分配?

我们需要手动解除分配吗?

例如

List<String> MyList=new List<String>{"0","1","0"}.Where(X=>X!="1").ToList();

这里bytes将分配多少钱X

Jon*_*eet 8

您实际上没有显示任何匿名类型.你已经展示了一个lambda表达式.在这种情况下,编译器将有效地为您创建一个额外的方法,如下所示:

private static bool SomeUnspeakableName(string X)
{
    return X != "1";
}
Run Code Online (Sandbox Code Playgroud)

那么你的代码将被有效地翻译成这个:

List<String> MyList=new List<String>{"0","1","0"}
       .Where(new Func<string, bool>(SomeUnspeakableName))
       .ToList();
Run Code Online (Sandbox Code Playgroud)

...除了实际上,编译器将在这种情况下创建一个委托实例,并缓存它.(当然,它会将扩展方法的使用转换为对Enumerable.Where和的正常调用Enumerable.ToList.)

因此,X最终成为一个字符串参数.在执行时,没有lambda表达式(将表达式树放在一边).只有使用生成的方法创建的委托.

现在,如果你使用匿名类型,就像这样:

var anon = new { Name = "Jon", Age = 34 };
Run Code Online (Sandbox Code Playgroud)

然后,这将创建一个新类,包含一个string变量和一个int变量,并具有与包含a string(当然是一个引用)和一个的普通类相同的内存占用int.