我有一个如下结构。我没什么问题

问题1:

struct MyStruct
{
    public MyStruct(int a)
    {
        this.a = a;
        this.b = 10;
    }
    public int a;
    public int b;
}


当我从MyStruct构造器中删除this.b时,它将给我一个错误“必须将字段完全分配,然后控制权才能返回给调用者”。但在上课的情况下不会发生

问题2:

struct MyStruct
{
    //public MyStruct(int a)
    //{
    //      this.a = a;
    //      this.b = 10;
    //}
    //int asd;
    //public int MyProperty { get; set; }
    public void getImplemen()
    {
        Console.WriteLine("azsdfa");
    }
    public int a;
    public int b;
}

static void Main(string[] args)
{
    MyStruct myStruct ;
    myStruct.a = 15;//when I comment this it will give an error
    myStruct.b = 15; //when I comment this it will give an error
    myStruct.getImplemen();
}


当我将MyStruct myStruct更改为MyStruct myStruct = new MyStruct ();
它工作正常。

为什么这样?

最佳答案

就是这样。

默认构造函数将每个字段初始化为默认值,而带有参数的构造函数将强制您初始化结构中的每个字段。

如果您有一个默认的构造函数和一个带参数的构造函数,您会问?好吧,我不记得了。很容易自己检查。

关于c# - C#中Struct的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32390295/

10-12 23:59