这个Struct类型的定义有什么问题?
本文关键字:什么 问题 定义 Struct 类型 这个 | 更新日期: 2023-09-27 18:11:03
我已经这样定义了我的结构体:
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;
}
}
但是它给了我以下错误:
"错误13自动实现属性的支持字段'EnterResults.frmApplication.Test.NewUnitName'必须完全分配在控制权返回给调用方之前。考虑调用默认值来自构造函数初始化项的构造函数。"
其实有两个问题:
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; }
}
您实际上没有对属性做任何事情。试试这个:
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;
}
}
我认为这与结构初始化有关。请注意,对我添加的默认构造函数的调用似乎使它满意:)
"似乎使它快乐"——这是多么愚蠢啊。我四处寻找真正的答案,这与结构体如何初始化有关。调用默认构造函数可确保在使用结构体之前初始化字段。
可以删除private
字段assayName
、oldUnitName
和newUnitName
。然后在构造函数中引用自动实现的属性:
public Test(string name, string oldValue, string newValue)
{
AssayName = name;
OldUnitName = oldValue;
NewUnitName = newValue;
}
您正在尝试创建一个自动实现的属性,但是您正在定义"支持字段"(没有明显的用途),然后您在构造函数中为这些支持字段赋值,并使您的属性完全不受影响。
您也可以调用默认构造函数:
public Test(string name, string oldValue, string newValue) : this()
{
assayName = name;
oldUnitName = oldValue;
newUnitName = newValue;
}
看这里