使用可空的bool存储三态值是否有任何优点?例如,null == 1st state, false == 2nd state, true == 3rd state
?
开销可能高于使用字节枚举,但我很好奇。
答案 0 :(得分:16)
答案 1 :(得分:15)
这是一个主观问题,但我会说不,因为它会影响可读性。
答案 2 :(得分:4)
我认为这样做是错误的。
布尔值是“双状态”类型。这是它的定义。
在C#,C ++,Java等等。
如果你想模拟三种状态,只需实现枚举而不是重新发明方形轮!
答案 3 :(得分:2)
否强>
我建议去 Enum ,因为你现在手头已经有3个状态了,并且范围蔓延可能会进一步增加。因此,Enum将是一个安全的赌注,更准确/可读用于描述三个州,最重要的是第三个既不是真也不是假的。
最后,它更像是对眼睛进行编码,后者会对此代码进行后续处理并使其具有意义和可读性
答案 4 :(得分:2)
在bool类型的末尾使用?
标记,这是一个包含可空bool的结构。
bool? mytristatebool = null;
答案 5 :(得分:1)
更简单的解决方法是使用两个布尔变量。 一个将保持null / not-null 而另一个将保持真/假
应用程序:
当您在布尔属性中缓存计算时,您需要知道它是否已经设置。
e.g。
// actual variable having true/false
private bool isX = false;
// variable holding wither above is set/not-set i.e. null/not-null
private bool isXSet = false;
public bool IsX
{
get
{
if (isXSet)
{
return isX;
}
else
{
isX = GetX(); // this could be time consuming.
isXSet = true;
return isX;
}
}
}
当上面的GetX()非常耗时且多次访问IsX时,这在性能调优中非常有用。
答案 6 :(得分:1)
如果它是一个WinForms程序,那么一种可能性就是使用System.Windows.Forms.CheckState。它具有Checked,Indeterminate和Unchecked的值 - 这可能适合您的目的,也可能不适合。
答案 7 :(得分:0)
对于未知或尚未确定,我会坚持null。你也失去了对数值进行数学运算的可能性。总而言之,我认为这不是一个好主意
答案 8 :(得分:0)
这取决于。非常适合像'Has Dog'这样的房产:真,假,或者我们只是不知道。