C#中一个变量后加一个?是什么意思

例如 int? DateTime?
2024-12-27 16:43:38
推荐回答(5个)
回答1:

这一类型在C#中叫做 “可空类型”;int?是一种类型,普通的int不能为null,而用int?,其值可以为null

int?或者Nullable 表示基础类型为值类型的对象,值类型与引用类型一样也可以分配 nullNothingnullptrnull 引用
对于一个类型,如果既可以给它分配一个值,也可以给它分配 nullNothingnullptrnull 引用,我们就说这个类型是可空的。因此,可空类型可表示一个值,或表示不存在任何值。例如,类似 String 的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。由于值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

我的总结就是:

可空类型的基础类型可以是任何非可空值类型或任何具有struct约束的类型参数,但不能是可空类型或引用类型。例如:int?代表是可空的整形,而int??则是无效类型。即可空类型可以表示其基础类型的所有值和一个额外的空值。语法 T?是System.Nullable的缩写形式。可空类型具有一个HasValue的bool类型只读属性,当可空类型实例的该属性为true时,则表示该实例是非空实例,包含一个已知值Value;HasValue为false时,访问Value属性将导致 System.InvalidOperationException。可空类型T?具有一个类型为T的单个参数的公共构造函数,如new int?(123)将获得一个值为123的int?类型实例。从T?到由T实现的任何接口都存在装箱转换,并且从由T实现的任何接口都存在到T?的拆箱转换。但是任何情况下可空类型都不满足接口约束,即使基础类型实现了该特定接口。

具体实例可参考http://msdn.microsoft.com/zh-cn/library/2cf62fcy(VS.80).aspx
http://www.biye5u.com/article/Csharp/jichu/2010/2767.html

回答2:

问题问的是变量加?不是变量类型加?以上都答得不对。
变量加?的意思是
if(变量!=null) 执行变量后面的操作
比如GameObject player;
player?.play();
意思是如果player不为null,则执行player.play();

回答3:

int 和DateTime 是不能为null,String可以
所以后面加个?表示一种可支持null的类型

int ?a =null 可以
int a=null 不可以

回答4:

int datetime都是值类型,不能为null
加了?以后就可以为null了

回答5:

在C#中 int ? 带表的是可空类型