枚举到布尔铸造问题

时间:2011-07-11 14:08:47

标签: c# casting enums typeconverter

我有以下枚举:

public enum MyEnum
{
    MyTrue,
    MyFalse
}

我希望最终能够自动将我的枚举转换为布尔值,使用如下简单的行:

MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;

目前,我必须这样做:

bool IsThisTrue = val == MyEnum.MyTrue;

是否有一些机制可以应用于我的枚举以允许本机enum-> bool转换?我想知道是否需要或不使用某种类型的变换器。

由于

编辑:我的自定义枚举有一个原因。由于这些属性最终都绑定到属性网格,因此我们有机制将所有自定义枚举绑定到资源文件中的多语言字符串。我们需要使用的所有枚举都在特定的命名空间中,因此需要“MyEnum”类。

3 个答案:

答案 0 :(得分:17)

该行仅适用于隐式静态转换运算符(或者可能是更混乱的true()运算符,但这在野外很少见)。您无法在枚举上定义运算符,因此最终答案是:no。

可以在MyEnum上写一个扩展方法,以便返回truefalse

static class MyEnumUtils {
    public static bool Value(this MyEnum value) {
        switch(value) {
            case MyEnum.MyTrue: return true;
            case MyEnum.MyFalse: return false;
            default: throw new ArgumentOutOfRangeException("value");
                 // ^^^ yes, that is possible
        }
    }
}

然后您可以使用bool IsThisTrue = val.Value();

答案 1 :(得分:13)

写一个像这样的扩展方法:

public static bool ToBoolean(this MyEnum value) {
    return value == MyEnum.MyTrue;
}

忘了它

答案 2 :(得分:4)

试试这个:

public enum MyEnum
{
    MyFalse = 0,
    MyTrue = 1
}

然后:

MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;

bool IsThisTrue = Convert.ToBoolean((int)val);