C#中的Tribool实现

时间:2010-02-01 06:12:15

标签: c# operator-overloading

我正在尝试使用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,尽管它们更加实用,正如你们许多人所指出的那样。

3 个答案:

答案 0 :(得分:7)

为什么不使用可以为空的布尔值的bool?

答案 1 :(得分:7)

bool?

完成。那呢?特别是,C#编译器将为您提供“提升”运算符以映射到bool。但可以说,它可能比<{1}}或单个枚举稍微更大

注意:不要使用bool,因为这实际上是装箱操作。

如果您无法使用ValueType(即您想从头开始实施),我会将其映射到bool?可能 a enum枚举,但我正常默认为byte

int

答案 2 :(得分:2)

Nullable<bool>出了什么问题?