编译器显示未分配结构对象字段和属性的不同错误
本文关键字:属性 错误 字段 显示 分配 结构 对象 编译器 | 更新日期: 2023-09-27 18:13:37
在下面第1行代码中,编译器显示错误:"使用可能未分配的字段'IntField' ",但对于第2行,错误是"使用可能未分配的局部变量'structObj' "。为什么会有不同的误差?
class Program
{
static void Main(string[] args)
{
StructA structObj;
Console.WriteLine(structObj.IntField); //Line :1
Console.WriteLine(structObj.IntProperty); //Line :2
Console.ReadKey();
}
}
struct StructA
{
public int IntField;
public int IntProperty { get; set; }
}
因为StructA
是一个结构体而IntField
是一个字段。
使用前先试试StructA structObj = new StructA()
。
我认为错误之间的差异的原因是属性被转换为方法。在未初始化的对象上调用方法是不可能的。
这里需要调用new() for structure,因为如果不使用new操作符,则字段保持未分配状态,并且在初始化所有字段之前不能使用对象。
对于属性值的初始化必须是
StructA structObj = new StructA();
你可以尝试不使用new,只对结构中的变量,但需要初始化,所以只分配值,如
structObj.IntField= 1;
但是对于属性,您需要new().