这个Struct类型的定义有什么问题

Boh*_*ohn 6 c# struct

我已经定义了这样的结构:

struct Test
{
    private string assayName;
    public string AssayName { get; set; }

    private string oldUnitName;
    public string OldUnitName { get; set; }

    private string newUnitName;
    public string NewUnitName { get; set; }

    public Test(string name, string oldValue, string newValue)
    {
        assayName = name;
        oldUnitName = oldValue;
        newUnitName = newValue;
    }

}
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误:

"错误13自动实现的属性'BackResults.frmApplication.Test.NewUnitName'的Backing字段必须在控制返回给调用者之前完全分配.考虑从构造函数初始化程序调用默认构造函数."

n8w*_*wrl 6

你实际上并没有对这些属性做任何事情.试试这个:

struct Test 
{ 
    public string AssayName { get; set; } 
    public string OldUnitName { get; set; } 
    public string NewUnitName { get; set; } 

    public Test(string name, string oldValue, string newValue) : this()
    { 
        AssayName = name; 
        OldUnitName = oldValue; 
        NewUnitName = newValue; 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

我认为这与struct初始化有关.注意我添加的默认构造函数的调用似乎让它开心:)

"似乎让它快乐" - 这有多愚蠢.我四处寻找与结构初始化有关的真正答案.调用默认构造函数确保在使用结构之前初始化字段.


Mat*_*ott 6

嗯,真的有两个问题:

1.您使用自动属性,但随后也提供字段,两者之间没有布线.

2.当您使用自动属性时,因为这是一个结构,所以必须先对它们进行初始化.您可以通过调用默认构造函数来完成此操作.所以修改后的版本是:

struct Test
{
    public Test(string name, string oldValue, string newValue)
        : this()
    {
        AssayName = name;
        OldUnitName = oldValue;
        NewUnitName = newValue;
    }

    public string AssayName { get; private set; }
    public string OldUnitValue { get; private set; }
    public string NewUnitValue { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)