我想知道?
在C#中的含义是什么?
我看到的内容有:DateTime?
或int?
。我想这是特定于C#4.0的?
我不能在谷歌找它,因为我不知道这个东西的名字
问题是我正在使用DateTime而且我有很多演员错误(从DateTime
到DateTime?
)。
谢谢
答案 0 :(得分:34)
这是撰写Nullable<int>
或Nullable<DateTime>
的简写。 Nullables与value types一起使用,不能为空(它们总是有值)。
顺便说一下,它并不特定于C#4。
如果int?
有值,您只能将int
分配给int? n = 1;
int i = n ?? default(int); //or whatever makes sense
,因此您的代码必须执行以下操作:
Nullable
另请注意,HasValue
有两个属性Value
和{{1}},如果已设置值,则可以使用test并获取实际值。
答案 1 :(得分:12)
这意味着它是nullable type。
它允许您为值类型(如int和DateTime)分配空值。它对数据库中的可选字段等非常有帮助。
答案 2 :(得分:5)
答案 3 :(得分:5)
?
是可以为空的值类型。
您可以使用??
运算符将其与值类型混合使用:
const int DefaultValue = -1;
// get a result that may be an integer, or may be null
int? myval = GetOptionalIdFromDB();
// the value after ?? is used if myval is null
int nonNullable = myval ?? DefaultValue;
可以将可空类型与null进行比较,因此以上是:
的简写if( myval != null ) {
nonNullable = myval.Value;
} else {
nonNullable = DefaultValue;
}
但我更喜欢??
答案 4 :(得分:1)
需要注意:[编辑:显然这有时只会发生]
// nullable type properties may not initialize as null
private int? foo; // foo = 0
// to be certain, tell them to be null
private int? foo = null;
答案 5 :(得分:1)
它是声明泛型类Nullable<T>
的实现的简写方式,其中T是不可为空的值类型。
所以
int? i = null;
与
相同Nullable<int> i = null;
如上所述,Nullable<T>
公开了HasValue属性,因此您可以在处理之前检查i
是否具有值。
有趣的是:如果将Nullable<int> i = 3;
转换为对象,则可以强制转换为int或Nullable<int>
,因为它在装箱前有一个值。但是,如果您将Nullable<int> i = null;
强制转换为对象,则在转换回int时会得到NullReferenceException但您可以转换回Nullable<int>
。
答案 6 :(得分:1)
正如其他人所说,在类型名称之后,它意味着可以为空的类型。
?也用在条件运算符中。
int max = x > y ? x : y
这相当于:
int max;
if( x > y )
{
max = x;
}
else
{
max = y;
}