C# “可为空类型”的默认值是什么;int?“;(包括问号)?
在C#中,类型为C# “可为空类型”的默认值是什么;int?“;(包括问号)?,c#,integer,nullable,C#,Integer,Nullable,在C#中,类型为int?的类实例变量的默认值是多少 例如,在下面的代码中,MyNullableInt如果从未显式赋值,将具有什么值 class MyClass { public int? MyNullableInt; } (答案似乎几乎肯定是null或0,但这是哪一个?对于int?——以及使用“type?”声明的任何可为null的类型,null 原因是: int?是类型的语法糖(其中T是int),结构。() Nullable类型有一个成员,当false时,该成员使Nullable实例
int?
的类实例变量的默认值是多少
例如,在下面的代码中,MyNullableInt
如果从未显式赋值,将具有什么值
class MyClass
{
public int? MyNullableInt;
}
(答案似乎几乎肯定是
null
或0
,但这是哪一个?对于int?
——以及使用“type?”声明的任何可为null的类型,null
原因是:
是类型的语法糖(其中T是int?
),结构。()int
类型有一个成员,当Nullable
时,该成员使false
实例“像”一个Nullable
值。特别是,当将具有null
HasValue==false的
值与实际的null
值进行比较时,将重写以返回null
true
- 从中,结构实例的初始默认值是将该结构的所有值类型字段设置为其默认值,并将该结构的所有引用类型字段设置为
李>null
- C#中
变量的默认值为bool
()。因此,默认的false
实例的null
属性是HasValue
;这反过来又使得false
实例本身的行为类似于可空
空
Nullable.GetValueOrDefault()
方法很重要,在处理使用Nullable
akaint?
值的数学计算时,该方法特别方便。很多时候,您不必检查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());
为什么要投否决票?(在没有实际运行代码来测试行为之前,这个问题的答案对我来说并不明显;令人惊讶的是,我在StackOverflow上找不到这个问题的副本,也无法通过Google在别处轻松找到。)你本可以先看一看——google为我找到的。@500——我在研究时确实找到了那篇文章——我在下面的回答中确实链接到了它——但据我所知,这篇文章没有明确说明可空类型实例的默认值为空。它确实说“HasValue的默认值为false。value属性没有默认值”,但这并不能直接回答我的原始问题,而不进行额外的挖掘。我想知道这是否是因为您可以设置一个断点并查看值是什么,或者是在即时窗口类型
int中?x代码>并查看结果是什么?当我从int更改声明时?x=零代码>到int?x代码>,我在下面的代码中得到了编译器错误:“使用未分配的局部变量x”。@JohnPick这是一个C#编译器功能,旨在防止因您在使用变量之前“忘记”初始化变量而产生的错误。您可能遇到未初始化的int的情况?当它是类成员变量时。这两个例子:那么这个地方基本上就是你的科技博客?您提出的问题只需要运行代码就可以得到答案,然后在同一分钟内自己回答问题。@JonSchneider很公平,我的坏thenVS编译器提示/警告具有误导性:字段“id”从未分配给,并且始终具有其默认值0
。很奇怪,不是吗?
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());