变量类型以?结尾?
什么 意思:
public bool? Verbose { get; set; }
当应用于string?
,有一个错误:
类型’string’必须是非可空值类型才能在generics类型或方法’System.Nullable’中将其用作参数’T’
?
使您的非可空(值)类型可为空。 它不适用于string
,因为它是引用类型,因此默认为可为空。
从MSDN ,关于值类型:
与引用类型不同,值类型不能包含空值。 但是,可空类型function允许将值类型分配给null。
?
基本上是Nullable
的简写。
如果您想了解更多信息,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。