以下是我的代码:
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;
}
}
这导致编译时错误说明
"类型'短语'必须是不可为空的值类型才能使用 它作为参数' T'在泛型类型或方法中#System; Nullable"
我尝试做的是有一个可为空的类变量Complement
,并允许它在构造函数中设置。我该如何做到最好?
答案 0 :(得分:6)
根据错误,Phrase
已经是可以为空的类型。这是因为它是一个类:
class Phrase
{
// ...
}
作为引用类型的类始终可以为空。为了使用Nullable<T>
(及其?
简写语法),类型必须是非可空的。哪个是原始类型或struct
:
struct Phrase
{
// ...
}
请注意,除了它们是否可以为空之外,类和结构之间存在相当大的差异。如果您希望将类型设为struct
,则可能很容易对代码进行重大更改。另一方面,如果您只想在该构造函数中允许null
,则默认情况下会执行此操作,只需删除?
构造。
答案 1 :(得分:-3)
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已经可以为空,你不能把&#34; Value&#34; Complement参数的属性,加上如果Phrase是一个类,它不应该是可空的(因为它已经是)