我正在尝试使用http://www.boost.org/doc/libs/1_41_0/doc/html/tribool.html作为参考来实现Tribool类型。
我正在使用结构,因为它是原始类型,不应该是可扩展的。我知道有三种类型的Tribools --- True,False和Unknown,默认构造函数应该提供一个False Tribool。我的问题是,我将什么数据类型设置为True,False和Unknown?现在我有:
struct Tribool
{
//True, False, and Unknown public constants
public static readonly Tribool TRUE, FALSE, UNKNOWN;
//Constructors
public Tribool()
{
Tribool = FALSE; //use ValueType instead?
}
但我不确定这是否正确,因为看起来我只是将Tribool设置为另一个Tribool。我应该使用ValueType吗?当我在VS中输入时它突然出现,这听起来很明智,但我无法从谷歌那里找到很多关于它的信息。
此外,Tribool需要能够使用常规bool操作,这意味着需要重载“true”和“false”。这是否需要操作员超载?或者它应该只是一个返回bool的方法?
提前致谢!
编辑:对不起,我应该提到这是一项任务。所以我不能使用bool,尽管它们更加实用,正如你们许多人所指出的那样。
答案 0 :(得分:7)
为什么不使用可以为空的布尔值的bool?
?
答案 1 :(得分:7)
bool?
完成。那呢?特别是,C#编译器将为您提供“提升”运算符以映射到bool
。但可以说,它可能比<{1}}或单个枚举稍微更大。
注意:不要使用bool
,因为这实际上是装箱操作。
如果您无法使用ValueType
(即您想从头开始实施),我会将其映射到bool?
(可能 a enum
枚举,但我正常默认为byte
:
int
答案 2 :(得分:2)
Nullable<bool>
出了什么问题?