使用此代码:
struct Foo<T1>
{
public T1 Item1 { get; private set; }
public Foo(T1 item1)
{
Item1 = item1;
}
}
我遇到这个错误:
在将控制权返回给调用者之前,必须完全分配自动实现的属性“Foo.Item1”的备份字段。考虑从构造函数初始化程序中调用默认构造函数。
我的问题是,为什么在调用构造函数后属性Item1
没有完全赋值?
修改:将set
更改为private set
,因为此问题与可变性无关。
答案 0 :(得分:16)
在此处添加this()
:
public Foo(T1 item1) : this()
{
Item1 = item1;
}
这是因为您正在分配属性,并且编译器无法推断属性仅为变量赋值;它可以在初始化实例之前执行其他操作,并且这是不允许的,因为结构可能具有垃圾数据。所以你必须首先用默认的构造函数初始化它,然后做你想要的。