【问题标题】:What is the difference between Nullable<bool> and bool? [duplicate]Nullable<bool> 和 bool 有什么区别? [复制]
【发布时间】:2018-11-16 10:11:32
【问题描述】:

当我对我的课程进行逆向工程时,我得到以下信息:

public Nullable<bool> Correct  { get; set; }
public Nullable<bool> Response { get; set; }

我编码:

public bool? Correct  { get; set; }
public bool? Response { get; set; }

谁能告诉我这两者之间是否有任何区别。我之前没有见过Nullable&lt;bool&gt;,我不确定它为什么不只是创建一个“布尔”。

注意:我将编码更改为布尔值?乔恩对 cme​​ts 的回应

【问题讨论】:

  • 我怀疑你实际上编码了public bool? Correct { get; set; }。编译器不会自动将bool 转换为bool?
  • 你确定你写的不是bool?而不是bool
  • 我注意到 Nullable 需要 System 命名空间但是 bool?才不是。有人知道那是什么吗?
  • 如果您使用不同的工具对代码进行逆向工程,它可能会返回 bool? - 这应该向您暗示没有区别 - 逆向工程工具无法知道两者中的哪一个你写的。
  • bool? 只是 C# 编译器为方便起见而定义的别名。

标签: c#


【解决方案1】:

“可以为 Nullable 分配值 true false 或 null。当您处理包含可能未分配值的元素的数据库和其他数据类型时,将 null 分配给数字和布尔类型的能力特别有用. 例如,数据库中的布尔字段可以存储值 true 或 false,或者它可能是未定义的。"

Nullable Types

【讨论】:

  • 这并不能解释 OP 的情况——我怀疑这是误诊。
  • @Jon - 现在我意识到数据库允许 NULL 而我的代码不允许。数据库脚本由我们的 DBA 完成,我对类进行了编码(错误地)。我还是想知道为什么逆向工程师不只是指定bool?
  • 好吧,至少现在您还可以对数据库进行健全性检查。
  • 我将代码更改为使用 Nullable,现在它要求我包含 System 命名空间。那么它们真的一样吗?
  • @Alan Nullable&lt;bool&gt;bool? 类似于 intSystem.Int32。它们只是表示同一事物的两种方式。您必须添加 System 命名空间,因为您使用更长的版本,就像您需要添加 System 如果您使用 Int32 而不是 int
【解决方案2】:

谁能告诉我这两者之间是否有任何区别。我 以前没有见过 Nullable,我不知道为什么会这样 不只是创建一个“布尔”

从技术上讲,Nullable 和 bool? 没有区别。无论你写什么,它们都会在 IL 中编译为 Nullable。所以没有区别。这 ?只是 C# 编译器语法。

为什么需要系统为 Nullable

这是因为它被用作type。并且类型需要在namespace 中。

但是bool和bool有区别吗?。由于 bool 是一种简单的值类型,不能分配 null 值,而您可以将值分配给 bool?。

Nullable 代表一个value type,可以赋值为null,它位于命名空间System中。

此外,它可以被赋值为 null,因此您可以像这样检查它是否具有价值

if(Correct.HasValue)
{
  //do some work
}

【讨论】:

    【解决方案3】:

    Nullable&lt;bool&gt;bool? 是等价的(“?”后缀是语法糖)。 Nullable&lt;bool&gt; 表示除了典型的bool 值:true 和 false, 有一个第三个​​值:null

    http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

    如果您使用不确定的值,例如,Null 值可能会很有用。在一些 如果有任何响应,您无法判断实例是否正确 已给予;比如你的情况

      // true  - instance is correct
      // false - instance is incorrect
      // null  - additional info required
      public bool? Correct { get; set; }
      // true  - response was given 
      // false - no response
      // null  - say, the response is in the process
      public bool? Response { get; set; }
    

    【讨论】:

      【解决方案4】:

      是的Nullable&lt;bool&gt;bool之间有区别

      public Nullable<bool> Correct { get; set; } // can assign both true/false and null
      Correct = null;  //possible 
      

      在你的情况下你不能拥有它

      public bool Correct { get; set; } //can assign only true/false
      Correct = null;  //not possible
      

      也许以前写代码的人可能不会接触到bool? dataType。

      System.Nullable&lt;bool&gt; 等价于bool?

      更新:Nullable&lt;bool&gt;bool?没有区别

      【讨论】:

      • 你好。我只是因为你的回答而投票给你。请注意,我现在将代码更改为 bool?我意识到这是我的错误。
      • @Alan 没有区别,称为别名。
      【解决方案5】:

      没有区别。

      提示:Nullable&lt;Nullable&lt;bool&gt;&gt; n; // not allowed

      Source msdn Nullable Types

      【讨论】:

        猜你喜欢
        • 2011-09-19
        • 2016-04-19
        • 2018-08-07
        • 1970-01-01
        • 2019-06-05
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        相关资源
        最近更新 更多