编译器显示未分配结构对象字段和属性的不同错误

本文关键字:属性 错误 字段 显示 分配 结构 对象 编译器 | 更新日期: 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().