?
意味着什么:
public bool? Verbose { get; set; }
应用于string?
时,会出现错误:
类型'string'必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作参数'T'
答案 0 :(得分:18)
?
使您的非可空(值)类型可以为空。它不适用于string
,因为它是引用类型,因此默认为可为空。
来自MSDN,关于价值类型:
与引用类型不同,是一种值类型 不能包含null值。 但是,可空类型的功能 允许值类型 分配给null。
?
基本上是Nullable<T> structure
的缩写。
如果您想了解更多信息,MSDN对此主题有great article。
答案 1 :(得分:11)
?
是下面结构的简写:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
您可以直接使用此结构,但?
是使结果代码更清晰的快捷语法。而不是输入:
Nullable<int> x = new Nullable<int>(125);
相反,你可以写:
int? x = 125;
这不适用于字符串,因为字符串是引用类型而不是值类型。
答案 2 :(得分:7)
bool?
是System.Nullable<bool>
的缩写。类型参数只接受值类型,而不是引用类型(例如字符串)。
答案 3 :(得分:5)
bool?
是Nullable<bool>
的简写符号。通常,the documentation表示:
语法T?是简写 Nullable,其中T是值类型。 这两种形式是可以互换的
由于string
不是value type(它是reference type),因此您无法将其用作Nullable<T>
的通用参数。
答案 4 :(得分:3)
? operator表示该属性实际上是可以为空的类型。
public bool? Verbose { get; set; }
等于
public Nullable<bool> Verbose { get; set; }
可空类型是c#2.0中引入的一种特殊类型,它接受一个值类型作为通用的praramater类型,并允许将空值分配给该类型。
可空类型只接受值类型作为泛型参数,这就是为什么在尝试使用时会出现编译错误的原因?运算符与字符串类型一起使用。
有关详细信息:MSDN Nullable Types
答案 5 :(得分:3)
只能将值类型声明为Nullable。引用类型是默认为可空的。所以你不能制作可以为空的字符串,因为string是一个引用类型。
答案 6 :(得分:3)
?
表示您的值类型可以为空值,特别是在数据库
处理你需要这些nullables来检查某些值是否为null。
它只能应用于值类型,因为coz引用类型可以为null。