枚举到布尔类型转换问题

本文关键字:问题 类型转换 布尔 枚举 | 更新日期: 2023-09-27 18:01:49

我有以下枚举:

public enum MyEnum
{
    MyTrue,
    MyFalse
}

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

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

目前,我必须这样做:

bool IsThisTrue = val == MyEnum.MyTrue;

是否有一些机制,我可以应用到我的枚举,以允许本机enum->bool类型转换?我想知道是否有一些类型转换器的变体是我所需要的。

感谢

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

枚举到布尔类型转换问题

这一行只能使用隐式静态转换操作符(或者可能是更令人困惑的true()操作符,但这在野外很少见到)。不能在枚举上定义操作符,所以最终的答案是:不能。

可以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();

写一个这样的扩展方法:

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

忘掉它

试试这个:

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

:

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