我被抛出一点点,我不确定答案是什么。
基本上 - 是否存在在三态数据类型中使用哪些值的约定?做一些谷歌搜索,它看起来不像:我见过:
..等等。如果有的话,我宁愿使用一个众所周知的约定。否则我会提出一个:-)很可能没有正确的答案,但只是想我会深入挖掘......
修改
在最近的代码中找到了这个Microsoft seem to use:-1 = true,0 = false,2 =未知。我假设 2 == unknown 意味着它只是在查看调试器/转储/内存中的原始值时解除了+ 1 / -1的歧义。奇怪的是,这个选项仅适用于仅此原因(消除了忘记1的变化意味着'真''的机会。)
答案 0 :(得分:3)
据我所知,没有惯例。
布尔值甚至没有一个约定,最常见的是:
另一个相关的常见(但不是通用)约定是对未定义的值使用-1。
如果您选择使用-1表示未定义,则可以使用0/1表示False / True:
当然,我必须提到第三个状态当然不应该是未定义/未知,而是FileNotFound。 ;)
答案 1 :(得分:3)
无论你附加什么语义,我都会选择你的三个值作为一个负数,一个正数和零。这允许仅使用单个测试和分支(> 0,< 0,== 0,> = 0,< = 0)对3个可能值的每个可能的1或2个元素子集中的成员资格进行最佳测试。 ,!= 0)。
答案 2 :(得分:1)
我会说没有什么比约定,但我更喜欢你提到的第三种情况,因为我已经多次使用过这种情况。
Value State
---------- ----------
-1 Undefined
0 False
+1 True
我不喜欢前两种情况,因为纯布尔状态大多被确定为0 = False
和0 <> True
所以它可能有点混乱。
答案 3 :(得分:0)
如果你正在寻找一个带有int的三态bool的替代品,你可以随时拥有nullable boolean,而不必担心标准。在C#bool? triState
中有类似的东西。它可以有值true,false或null,可以认为是未知的 - 但我发现这不是你想要的。
我不知道约定。肯定不是来自这里给出的答案。我喜欢你的第三个。
但不同的观点,我的选择是:
{ True, Unknown, False } => 0, 1, 2 // going by enum like values...
编辑:经过@LarsTech的一个好点,我应该澄清一下。如果我知道变量可以有两个以上的值,那么我会认为它是一个枚举,因此我可以将它转换为{0,1,2}。我总是遵循这样的枚举值模式:“好,好,差”。它对我来说很自然,但对于许多人来说,真的有一个“0”是不受欢迎的。总是可以有相反的顺序。