变量类型以?结尾?

时间:2010-05-19 08:39:21

标签: c# .net types nullable

?意味着什么:

public bool? Verbose { get; set; }

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

  

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

7 个答案:

答案 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。