【发布时间】:2012-12-05 20:27:45
【问题描述】:
假设我们有以下使用泛型的struct 定义:
public struct Foo<T>
{
public T First;
public T Second;
public Foo(T first)
{
this.First = first;
}
}
编译器说
在控制权返回给调用者之前必须完全分配'Foo.Second'
但是,如果Foo是一个类,那么它编译成功。
public class Foo<T>
{
public T First;
public T Second;
public Foo(T first)
{
this.First = first;
}
}
为什么?为什么编译器会以不同的方式对待它们?此外,如果在第一个 Foo 中没有定义构造函数,那么它会编译。为什么会有这种行为?
【问题讨论】:
-
如果你使用结构体,你真的应该考虑让它不可变。见mutable structs are evil。使其不可变的一种方法是说
public readonly T First; public readonly T Second;。然后在实例构造函数中分配所有实例字段是很自然的。另一方面,如果您真的不想分配给所有字段,请链接(隐式和神奇的)无参数构造函数,当然,例如:: this()(但我想您知道这一点)。