我想知道为什么不能这样做:

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;

(这里是带有object initalizer的answer from Jon Skeet explaining the usage of temporary object,但有一个不同的场景)

关于c# - 对象初始化器中的只读字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18385248/

10-11 22:30