C# 布尔型铸造问题的枚举
我有以下列举:C# 布尔型铸造问题的枚举,c#,casting,enums,typeconverter,C#,Casting,Enums,Typeconverter,我有以下列举: public enum MyEnum { MyTrue, MyFalse } 我希望最终能够自动将枚举转换为布尔值,只需一行代码,如下所示: MyEnum val = MyEnum.MyTrue; bool IsThisTrue = val; public static bool ToBoolean(this MyEnum value) { return value == MyEnum.MyTrue; } 目前,我必须这样做: bool IsThis
public enum MyEnum
{
MyTrue,
MyFalse
}
我希望最终能够自动将枚举转换为布尔值,只需一行代码,如下所示:
MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
public static bool ToBoolean(this MyEnum value) {
return value == MyEnum.MyTrue;
}
目前,我必须这样做:
bool IsThisTrue = val == MyEnum.MyTrue;
是否有一些机制可以应用于我的枚举以允许本机enum->bool强制转换?我想知道我是否需要某种类型转换器的变体
谢谢
编辑:我的自定义枚举是有原因的。由于这些属性最终都绑定到一个属性网格,因此我们有机制将所有自定义枚举绑定到资源文件中的多语言字符串。我们需要使用的所有枚举都位于一个特定的名称空间中,因此需要“MyEnum”类。该行只能使用隐式静态转换运算符(或者可能是更容易混淆的
true()
运算符,但在野外很少看到)。您无法在枚举上定义运算符,因此最终的答案是:否
但是,您可以在MyEnum
上编写一个扩展方法,以返回true
或false
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()代码>编写如下扩展方法:
MyEnum val = MyEnum.MyTrue;
bool IsThisTrue = val;
public static bool ToBoolean(this MyEnum value) {
return value == MyEnum.MyTrue;
}
忘掉它试试这个:
public enum MyEnum
{
MyFalse = 0,
MyTrue = 1
}
然后:
我是.NET3.5世界的新手,我忘记了这个功能的存在,我将尝试一下,谢谢。