为什么我不能在我的结构中初始化我的字段?

我很惊讶我无法在结构中初始化我的字段,为什么会这样? 喜欢:

struct MyStruct { private int a = 90; } 

但这是一个complie时间错误。 我不知道为什么这是一个问题? 请向我解释一下。

原因主要是表现。 考虑以下,

 var a = new MyStruct[1000]; 

如果C#允许在结构中初始化字段,那么初始化必须执行1000次,对于数组中的每个元素执行一次。 C#希望避免在其他语言中可能出现的这种隐式行为。

在C#中, struct不能声明默认构造函数。

编译器将初始化语句移动到构造函数,而C#中的struct不会发生这种情况。

那是因为您的赋值实际上是由编译器转换为在默认构造函数中完成的。 但是C# struct没有默认的构造函数,你可以在Kent Boogaart发布的链接中看到。

这是为了表现。 当您使用默认构造函数创建结构时,它所做的只是在堆栈上分配许多字节并将它们初始化为0。