我已经定义了这样的结构:
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字段必须在控制返回给调用者之前完全分配.考虑从构造函数初始化程序调用默认构造函数."
你实际上并没有对这些属性做任何事情.试试这个:
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初始化有关.注意我添加的默认构造函数的调用似乎让它开心:)
"似乎让它快乐" - 这有多愚蠢.我四处寻找与结构初始化有关的真正答案.调用默认构造函数确保在使用结构之前初始化字段.
嗯,真的有两个问题:
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)