C#在构造函数中具有相同类型的可空对象

Kev*_*Kev 0 c# nullable

以下是我的代码:

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这导致编译时错误说明

"类型'短语'必须是不可为空的值类型,才能在泛型类型或方法'System.Nullable'中将其用作参数'T'

我正在试图做的是有一个可为空类变量Complement,并允许它在构造函数中进行设置.我该如何做到最好?

Dav*_*vid 6

根据错误,Phrase已经是可以为空的类型了.这是因为它是一个类:

class Phrase
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

作为引用类型的类始终可以为空.为了使用Nullable<T>(及其?简写语法),类型必须是非可空的.哪个是原始类型还是struct:

struct Phrase
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,类和结构之间存在相当大的差异,除了它们是否可以为空.如果您想使类型为a struct,那么很容易对代码进行非常重要的更改.另一方面,如果您只是想null在该构造函数中允许,那么默认情况下,只需删除?构造.