可空类型"int?"(包括问号)的默认值是多少?
What is the default value of the nullable type "int?" (including question mark)?
在 C# 中,int?
类型的 class 实例变量的默认值是多少?
例如,在下面的代码中,如果 MyNullableInt
从未被显式赋值,它会有什么值?
class MyClass
{
public int? MyNullableInt;
}
(似乎答案几乎肯定是 null
或 0
,但究竟是哪一个?)
int?
以及任何使用 "type?" 声明的可空类型的默认值是 null
.
为什么会这样:
int?
是 Nullable<T> (where T is int
), a struct. (reference) 类型的语法糖
Nullable<T>
类型有一个 bool HasValue member, which when false
, makes the Nullable<T>
instance "act like" a null
value. In particular, the Nullable<T>.Equals method 被覆盖为 return true
当 Nullable<T>
和 HasValue == false
与实际的比较时null
值。
- 从 C# Language Specification 11.3.4 开始,结构实例的初始默认值是该结构的所有值类型字段设置为其默认值,并且该结构的所有引用类型字段设置为
null
。
- C# 中
bool
变量的默认值为 false
(reference)。因此,默认 Nullable<T>
实例的 HasValue
属性 是 false
;这反过来又使 Nullable<T>
实例本身表现得像 null
.
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());
我觉得分享 Nullable<T>.GetValueOrDefault()
方法很重要,该方法在处理使用 Nullable<int>
又名 int?
值的数学计算时特别方便。很多时候你不必检查 HasValue
属性,你可以只用 GetValueOrDefault()
代替。
var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());
var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);
Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());
在 C# 中,int?
类型的 class 实例变量的默认值是多少?
例如,在下面的代码中,如果 MyNullableInt
从未被显式赋值,它会有什么值?
class MyClass
{
public int? MyNullableInt;
}
(似乎答案几乎肯定是 null
或 0
,但究竟是哪一个?)
int?
以及任何使用 "type?" 声明的可空类型的默认值是 null
.
为什么会这样:
int?
是 Nullable<T> (where T isint
), a struct. (reference) 类型的语法糖
Nullable<T>
类型有一个 bool HasValue member, which whenfalse
, makes theNullable<T>
instance "act like" anull
value. In particular, the Nullable<T>.Equals method 被覆盖为 returntrue
当Nullable<T>
和HasValue == false
与实际的比较时null
值。- 从 C# Language Specification 11.3.4 开始,结构实例的初始默认值是该结构的所有值类型字段设置为其默认值,并且该结构的所有引用类型字段设置为
null
。 - C# 中
bool
变量的默认值为false
(reference)。因此,默认Nullable<T>
实例的HasValue
属性 是false
;这反过来又使Nullable<T>
实例本身表现得像null
.
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());
我觉得分享 Nullable<T>.GetValueOrDefault()
方法很重要,该方法在处理使用 Nullable<int>
又名 int?
值的数学计算时特别方便。很多时候你不必检查 HasValue
属性,你可以只用 GetValueOrDefault()
代替。
var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());
var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);
Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());