我想知道为什么不可能做到以下几点:
struct TestStruct { public readonly object TestField; } TestStruct ts = new TestStruct { /* TestField = "something" // Impossible */ };
对象初始值设定项不应该能够设置字段的值
?
解决方法
对象初始化程序在内部使用临时对象,然后将每个值分配给属性.拥有一个只读字段会破坏它.
以下
TestStruct ts = new TestStruct { TestField = "something"; };
会翻译成
TestStruct ts; var tmp = new TestStruct(); tmp.TestField = "something"; //this is not possible ts = tmp;
(这是带有对象初始化器的answer from Jon Skeet explaining the usage of temporary object但具有不同的场景)