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?
您实际上没有显示任何匿名类型.你已经展示了一个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.