变量声明后的一个问号是什么意思?

gle*_*roo 46 .net c#

在开源项目中玩游戏时,我对ToString一个DateTime对象的尝试被编译器阻止了.当我跳到定义时,我看到了这个:

public DateTime? timestamp;
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我这是什么以及为什么它可能有用?

Cam*_*ron 64

这是一个可以为空的类型.可空类型允许值类型(例如ints和结构,如DateTime)包含null.

?是语法糖,Nullable<DateTime>因为它经常被使用.

致电ToString():

if (timstamp.HasValue) {        // i.e. is not null
    return timestamp.Value.ToString();
}
else {
    return "<unknown>";   // Or do whatever else that makes sense in your context
}
Run Code Online (Sandbox Code Playgroud)


Wes*_*ser 9

?使得一个值类型(int,bool,DateTime,或任何其他structenum)经由可空System.Nullable<T>类型.DateTime?意味着变量是a System.Nullable<DateTime>.您可以为该变量指定一个DateTime或值null.要检查变量是否具有值,请使用HasValue属性并获取实际值,请使用该Value属性.


Jac*_*cob 5

这是一个捷径Nullable<DateTime>.值类型,如DateTime不能为null; Nullable<>包装值类型,以便您拥有具有HasValue属性和其他方便功能的对象.