变量类型以?结尾?

什么 意思:

 public bool? Verbose { get; set; } 

当应用于string? ,有一个错误:

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

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

从MSDN ,关于值类型:

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

? 基本上是Nullable structure的简写。

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

? 是下面结构的简写:

 struct Nullable { public bool HasValue; public T Value; } 

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

 Nullable x = new Nullable(125); 

相反,你可以写:

 int? x = 125; 

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

bool?System.Nullable的简写forms。 类型参数只接受值类型,而不是引用类型(例如字符串)。

bool?Nullable的简写符号。 一般来说, 文档说明:

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

由于string不是值类型 (它是引用类型 ),因此不能将其用作Nullable的generics参数。

的? operator表示该属性实际上是可空类型。

 public bool? Verbose { get; set; } 

是等价的

 public Nullable Verbose { get; set; } 

可空类型是c#2.0中引入的一种特殊类型,它接受值类型作为通用的praramater类型,并允许将空值分配给该类型。

可空类型只接受值类型作为generics参数,这就是为什么在尝试使用时会出现编译错误的原因? 运算符与字符串类型一起使用。

有关更多信息: MSDN可空类型

只有值类型可以声明为Nullable。 引用类型是默认为可空的。 所以你不能制作可以为空的字符串,因为string是一个引用类型。

? 表示您的值类型可以具有空值,特别是在数据库的情况下

处理你需要这些nullables来检查某些值是否为null。

它只能应用于值类型,因为coz引用类型可以为null。