变量类型以?结尾?

Mic*_*Mit 11 .net c# types nullable

什么?意思是:

public bool? Verbose { get; set; }
Run Code Online (Sandbox Code Playgroud)

应用于时string?,会出现错误:

类型'string'必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作参数'T'

Ond*_*ták 18

?使您的非可空(值)类型可为空.它不起作用string,因为它是引用类型,因此默认为可为空.

MSDN,关于值类型:

与引用类型不同,值类型不能包含空值.但是,可空类型功能允许将值类型分配给null.

?基本上是一个简写Nullable<T> structure.

如果您想了解更多信息,MSDN有一篇关于此主题的精彩文章.


Nei*_*ght 11

?是下面结构的简写:

struct Nullable<T>
{
    public bool HasValue;
    public T Value;
}
Run Code Online (Sandbox Code Playgroud)

您可以直接使用此结构,但这?是使结果代码更清晰的快捷语法.而不是键入:

Nullable<int> x = new Nullable<int>(125);
Run Code Online (Sandbox Code Playgroud)

相反,你可以写:

int? x = 125;
Run Code Online (Sandbox Code Playgroud)

这不适用于字符串,因为字符串是引用类型而不是值类型.


And*_*bel 7

bool?是一个简短的表格System.Nullable<bool>.类型参数只接受值类型,而不是引用类型(例如字符串).


Kla*_*sen 5

bool?是一种简写符号Nullable<bool>.一般来说,文档说明:

语法T?是Nullable的简写,其中T是值类型.这两种形式是可以互换的

由于string不是值类型(它是引用类型),因此不能将其用作通用参数Nullable<T>.