Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中作为三态变量的可空布尔#_C#_State_Boolean - Fatal编程技术网

C# C语言中作为三态变量的可空布尔#

C# C语言中作为三态变量的可空布尔#,c#,state,boolean,C#,State,Boolean,使用可空布尔存储三态值有什么好处吗?例如,null==1st状态,false==2nd状态,true==3rd状态 开销可能比使用字节枚举要高,但我很好奇。这是一个有点主观的问题,但我会说不,因为这会影响可读性。我相信这样做是错误的 布尔值是“两状态”类型。这就是它的定义 > C,C++,java或其他任何东西。 如果您想模拟三种状态,只需实现一个枚举,而不是重新发明一个方轮 对于未知或尚未确定,我将坚持使用null。你也失去了对这些值进行数学运算的可能性。总而言之,我认为这不是一个好主意 我

使用可空布尔存储三态值有什么好处吗?例如,
null==1st状态,false==2nd状态,true==3rd状态


开销可能比使用字节枚举要高,但我很好奇。

这是一个有点主观的问题,但我会说不,因为这会影响可读性。

我相信这样做是错误的

布尔值是“两状态”类型。这就是它的定义

<> > C,C++,java或其他任何东西。
如果您想模拟三种状态,只需实现一个枚举,而不是重新发明一个方轮

对于未知或尚未确定,我将坚持使用null。你也失去了对这些值进行数学运算的可能性。总而言之,我认为这不是一个好主意

我建议使用Enum,因为现在已经有3个状态在手,随着范围的扩展,它可能会进一步增加。因此,Enum将是一个安全的赌注,更精确/可读,用于描述三种状态,最重要的是第三种状态,它既不正确也不错误

最后,它更像是为眼睛编写的代码,后者将关注此代码,并使其具有意义和可读性

您应该获得一份

第177页有一章在枚举参数和布尔参数之间进行选择

其中一点是:

  • 除非您绝对确定永远不需要两个以上的值,否则不要使用布尔值

    • 一个更简单的解决方法是使用两个布尔变量。 一个将保持空/不空 另一个将保持正确/错误

      本标准的一个应用:

      在布尔属性中缓存计算时,需要知道它是否已设置

      e、 g


      当上面的GetX()非常耗时且IsX被多次访问时,这在性能调整中非常有用。

      如果它是WinForms程序,那么一种可能是使用System.Windows.Forms.CheckState。它有已检查、不确定和未检查的值-这些值可能适合您的目的,也可能不适合您的目的。

      使用
      在类型bool的末尾标记,该类型bool是一个包含可为空bool的结构

      bool? mytristatebool = null;
      

      视情况而定。对于像“Has Dog”这样的属性很好:是真是假,或者我们只是不知道。

      我在看到
      False==1
      的那一刻死了一点(没关系,问题被编辑了)。我认为以这种方式使用可空bool是完全不舒服的,试想一段负责检查其值的代码,并将其与枚举或正则整数进行比较,这三种状态代表什么?一个
      bool?
      与一个
      enum
      ?@BoltClock相比会有什么?BoltClock被编辑以延长全世界程序员的预期寿命:)@k3b:nullable bool type
      bool?
      就是
      nullable
      的别名。它模糊了价值背后的实际概念。SQL的什么实现?如果是一个位,它可以是0或1。@Matías:在SQL中,
      a
      表达式的计算结果为
      TRUE
      FALSE
      NULL
      。这就是“NULL”的情况吗?@Matías:我不确定你的意思。如果
      a
      1
      b
      NULL
      ,则表达式的计算结果为
      NULL
      。不管怎样,因为这是一个C#问题,我大部分时间都在开玩笑。好吧,这就是重点。NULL不是布尔值。布尔值为“true”或“false”,即使SQL在执行“ab”。经验告诉我应该有一个枚举:HasDog、NoDog、Unspecified。NULL总是一个问号。我们是缺少数据,还是他们填写了未指明的数据?你不可避免地想要,
      Has2Dogs
      ,或者
      HasCat
      。是的,但OP的问题是关于三态,而不是四态等等。而你就是OP:-)C#指南:这对我所做的工作非常有效。谢谢你的建议,我完全忘了。
      bool? mytristatebool = null;