枚举到布尔铸造问题

gre*_*b64 14 c# enums casting typeconverter

我有以下枚举:

public enum MyEnum
{
    MyTrue,
    MyFalse
}
Run Code Online (Sandbox Code Playgroud)

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

MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
Run Code Online (Sandbox Code Playgroud)

目前,我必须这样做:

bool IsThisTrue = val == MyEnum.MyTrue;
Run Code Online (Sandbox Code Playgroud)

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

谢谢

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

Mar*_*ell 18

该行仅适用于隐式静态转换运算符(或者可能是更混乱的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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Dyp*_*ppl 13

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

public static bool ToBoolean(this MyEnum value) {
    return value == MyEnum.MyTrue;
}
Run Code Online (Sandbox Code Playgroud)

并忘掉它


mrK*_*mrK 5

尝试这个:

public enum MyEnum
{
    MyFalse = 0,
    MyTrue = 1
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

bool IsThisTrue = Convert.ToBoolean((int)val);
Run Code Online (Sandbox Code Playgroud)