C#Struct Generic Constructor

时间:2010-12-14 21:59:41

标签: c# generics constructor struct

使用此代码:

struct Foo<T1>
{
    public T1 Item1 { get; private set; }

    public Foo(T1 item1)
    {
        Item1 = item1;
    }
}

我遇到这个错误:

  

在将控制权返回给调用者之前,必须完全分配自动实现的属性“Foo.Item1”的备份字段。考虑从构造函数初始化程序中调用默认构造函数。

我的问题是,为什么在调用构造函数后属性Item1没有完全赋值?

修改:将set更改为private set,因为此问题与可变性无关。

1 个答案:

答案 0 :(得分:16)

在此处添加this()

public Foo(T1 item1) : this()
{
    Item1 = item1;
}

这是因为您正在分配属性,并且编译器无法推断属性为变量赋值;它可以在初始化实例之前执行其他操作,并且这是不允许的,因为结构可能具有垃圾数据。所以你必须首先用默认的构造函数初始化它,然后做你想要的。