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

Emb*_*rja 4 c#

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

struct MyStruct
{
    private int a = 90;
}
Run Code Online (Sandbox Code Playgroud)

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

Meh*_*ari 9

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

编译器将初始化语句移动到构造函数,这struct在C#中不会发生.


chu*_*ckj 3

原因主要是性能。考虑以下,

var a = new MyStruct[1000];
Run Code Online (Sandbox Code Playgroud)

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

  • 无意冒犯,但为什么不让结构的创建者来决定呢?没什么可失去的。如果以这种方式初始化的字段值可以由“default(TheSaidStruct)”使用,而不是仅用零填充,那就太好了。 (2认同)