将可空整数初始化为默认值的最佳实践?
Posted
技术标签:
【中文标题】将可空整数初始化为默认值的最佳实践?【英文标题】:Best practice for initializing a nullable integer to default value? 【发布时间】:2016-09-07 17:55:18 【问题描述】:我遇到了一些设置可空整数的代码,如下所示:
int? xPosition = new int?();
这对我来说是一种不熟悉的语法。我会期待以下任何一种形式:
int? xPosition = null;
int? xPosition = default(int?);
这三个变量声明之间有什么功能上的区别吗?
【问题讨论】:
上帝禁止重复项实际上被关闭为重复项,因为人们可能只是重复完全相同的答案以获得更多虚构的互联网点而无所事事...... 【参考方案1】:没有功能差异。这三个都必须实例化一个int?
,然后由于默认为HasValue == false
,它们都不需要后续的成员分配。
【讨论】:
【参考方案2】:在您的示例中,最好的方法是:
int? xPosition = null;
但是,在不同的场景下,其他方式可能会更好,甚至是唯一的可能。例如,在接收不同类型数据的代码中,default
是可行的方法,因为默认值取决于类型,并不总是null
。例如,如果某些代码可能会收到int
或int?
,那么您不知道null
上的默认值是否为零,因此使用default
保证您将获得正确的默认值。
这种情况的一个例子是使用 LINQ。
【讨论】:
【参考方案3】:根据规范,这些都是等效的:
4.1.10 可空类型
HasValue 为 false 的实例称为 null。空实例具有未定义的值
4.1.2 默认构造函数
所有值类型都隐式声明了一个公共的无参数实例构造函数,称为默认构造函数。默认构造函数返回一个零初始化实例,称为值类型的默认值:
• 对于结构类型,默认值是通过将所有值类型字段设置为其默认值并将所有引用类型字段设置为空而产生的值。
可空类型是结构,HasValue
是一个布尔值,默认值为 false
,因此 new int?()
为空。
5.2 默认值
变量的默认值取决于变量的类型,确定如下:
• 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同(第 4.1.2 节)。
所以default(int?)
等价于new int?()
【讨论】:
以上是关于将可空整数初始化为默认值的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章