c# - 可空类型 "int?"(包括问号)的默认值是多少?

标签 c# integer nullable

在 C# 中,int 类型的类实例变量的默认值是多少?

例如,在下面的代码中,如果 MyNullableInt 从未被显式赋值,它会有什么值?

class MyClass
{
    public int? MyNullableInt;
}

(似乎答案几乎肯定是 null0,但究竟是哪一个?)

最佳答案

int? 的默认值-- 对于任何使用“type?”的可空类型声明——是null .

为什么会这样:

  • int?Nullable<T> 类型的语法糖(其中 T 是 int ),一个结构。 ( reference )
  • Nullable<T>类型有一个 bool HasValue成员(member),当false , 使得 Nullable<T>实例“表现得像”一个 null值(value)。特别是 Nullable<T>.Equals method被覆盖返回 trueNullable<T>HasValue == false与实际 null 进行比较值(value)。
  • 来自 C# Language Specification 11.3.4 ,结构实例的初始默认值是该结构的所有值类型字段设置为其默认值,并且该结构的所有引用类型字段设置为 null .
  • 默认值 bool C# 中的变量是 false (reference)。因此,HasValue默认属性 Nullable<T>实例是 false ;这反过来又使Nullable<T>实例本身就像null .

关于c# - 可空类型 "int?"(包括问号)的默认值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153832/

相关文章:

c++ - 标志如何在 C 中工作?

c# - 这是使用 FluentAssertions 比较可空类型与其基础类型时的错误吗?

c# - Entity Framework 不可为空的列映射到可为空的实体属性

C# MySql.Data.MySqlClient.MySqlException (0x80004005) 问题

c# - 同步调用 BackgroundWorker

c# - 我如何知道给定的 .NET 程序集面向哪个平台?

numbers - 如何在 Kotlin 中将 Int 转换为十六进制字符串?

c# - 拆分 ;然后在 = 上,使用 String.Split 时遇到问题,需要正则表达式

java - 这是我的代码。在这种情况下,它将输出显示为不等于。但是如果我传递小于 128 的输入,那么它将输出为 Equal

java - 从 EditText 获取字符串,没有可空错误