假设我们有以下内容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
然后它就编译了。为什么会有这种行为?
这是因为编译器规则强制要求必须在控制权离开任何构造函数之前分配结构中的所有字段。
您可以通过执行以下操作使代码正常工作:
public Foo(T first)
{
this.First = first;
this.Second = default(T);
}
另请参阅为什么必须使用非默认构造函数初始化 C# 结构中的所有字段? https://stackoverflow.com/questions/721246/why-must-i-initialize-all-fields-in-my-c-sharp-struct-with-a-non-default-constru
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)