C# 在构造函数中具有相同类型的可空对象
C# have nullable object of same type in constructor
下面是我的代码:
class Phrase
{
public String Name { get; private set; }
public Head Head { get; private set; }
public Phrase? Complement { get; private set; }
public Phrase(String Name, Head Head, Phrase? Complement)
{
this.Name = Name;
this.Head = Head;
this.Complement = Complement;
}
}
这会导致编译时错误
"The type 'Phrase' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable"
我尝试做的是拥有一个可为空的 class 变量 Complement
,并允许在构造函数中设置它。我该如何最好地做到这一点?
public String Name { get; private set; }
public Head Head { get; private set; }
public Phrase? Complement { get; private set; }
public Phrase(String Name, Head Head, Phrase? Complement)
{
this.Name = Name;
this.Head = Head;
this.Complement = Complement;
}
this.Complement 已经可以为 null,您不能将 Complement 参数的 "Value" 属性 放入,另外如果 Phrase 是 Class 则不应该可为空(因为它已经是)
根据错误,Phrase
已经是一个可为 null 的类型。这是因为它是 class:
class Phrase
{
// ...
}
类 是引用类型,始终可为空。为了使用 Nullable<T>
(及其 ?
shorthand 语法),类型必须是不可空的。这将是原始类型或 struct
:
struct Phrase
{
// ...
}
请注意,classes 和结构之间存在 相当大的 差异,除了它们是否可为 null 之外。如果你想让你的类型成为 struct
,那很容易对你的代码做出非常重大的改变。另一方面,如果您只是想在该构造函数中允许 null
那么默认情况下它会这样做,只需删除 ?
构造。