variables声明之后的一个问号是什么意思?

虽然在一个开源项目中玩耍,但我试图ToString一个DateTime对象被编译器阻止。 当我跳到这个定义时,我看到了这个:

public DateTime? timestamp; 

可能有人请赐教我这是什么,为什么它可能是有用的?

这是一个可以空的types 。 可为空的types允许值types (例如int和像DateTime这样的结构)包含null。

这个?Nullable<DateTime>语法糖,因为它经常被使用。

调用ToString()

 if (timstamp.HasValue) { // ie is not null return timestamp.Value.ToString(); } else { return "<unknown>"; // Or do whatever else that makes sense in your context } 

? 通过System.Nullable<T>types使值types( intboolDateTime或任何其他structenum )可以为空。 DateTime? 意味着该variables是一个System.Nullable<DateTime> 。 您可以将DateTime或值null分配给该variables。 要检查variables是否有值,请使用HasValue属性并获取实际值,请使用Value属性。

这是Nullable<DateTime>的快捷方式。 值types,如DateTime不能为null; Nullable<>封装值types,以便您拥有一个具有HasValue属性和其他方便function的对象。

它是可以空的datetime