c#声明变量加问号(?)的区别 DateTime StartTime和DateTime? StartTime有什么区别?

发布网友 发布时间:2022-03-31 05:51

我来回答

5个回答

热心网友 时间:2022-03-31 07:20

新的语法,可空值类型。

如Int32、结构体等这样的类型是不可能为空的,常见的如int,DateTime都是不可能为空的。所以在需要判断是否有值的场合,可以用加问号的可空值类型,如int?,DateTime?

这时,可以为空(null),并且可以通过它的HasValue属性来判断是否有值,并通过Value属性获得真正的值。
它可以通过对包装类型直接赋值的方式隐式创建,如:
int? a=32;

具体的,可以搜索“可空值类型”来了解更多信息。

热心网友 时间:2022-03-31 08:38

表示该变量可以为null,如:int? i=null;而不带问号 int i=0;(不能让i=null)

详细介绍:
对于一个类型,如果既可以给它分配一个值,也可以给它分配 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)(表示没有任何值),我们就说这个类型是可空的。因此,可空类型可表示一个值,或表示不存在任何值。例如,类似 String 的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。由于值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

Nullable 类为 Nullable <(Of <(T>)>) 结构提供补充支持。Nullable 类支持获取可空类型的基础类型,对于其基础值类型不支持泛型比较和相等比较运算的可空类型,该类支持对其进行比较和相等比较运算。

方案
根据具体环境,使用可空类型来表示存在或不存在的事物。例如,HTML 标记的某个可选属性可能存在于某一个标记中,但不存在于另一个标记中;或者数据库表的某个可空列可能存在于表的某一行中,但不存在于另一行中。

可将该属性或列表示为类中的一个字段,并可以将该字段定义为值类型。该字段可包含属性或列的所有有效值,但不能提供一个附加值来表示属性或列不存在。在这种情况下,将该字段定义为可空类型而不是值类型。

装箱和取消装箱
在对可空类型进行装箱时,公共语言运行库自动将 Nullable <(Of <(T>)>) 对象的基础值(而不是 Nullable <(Of <(T>)>) 对象本身)装箱。也就是说,如果 HasValue 属性为 true,则将 Value 属性的内容装箱。如果 HasValue 属性为 false,则将 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing) 装箱。在对可空类型的基础值进行取消装箱时,公共语言运行库创建一个新的初始化为基础值的 Nullable <(Of <(T>)>) 结构。

热心网友 时间:2022-03-31 10:13

加问号是2.0的新语法:可空值类型
九头鸟8 第二行说的不准确.
此null非彼null.

热心网友 时间:2022-03-31 12:04

好像是可以为NULL把INT是这样的

热心网友 时间:2022-03-31 14:12

DateTime? 等价于 Nullable<DateTime>
表示是可以为null

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com