【问题标题】:Enumeration to boolean casting question枚举到布尔转换问题
【发布时间】:2011-10-02 20:12:29
【问题描述】:

我有以下枚举:

public enum MyEnum
{
    MyTrue,
    MyFalse
}

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

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

目前,我必须这样做:

bool IsThisTrue = val == MyEnum.MyTrue;

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

谢谢

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

【问题讨论】:

    标签: c# casting enums typeconverter


    【解决方案1】:

    该行仅适用于隐式静态转换运算符(或者可能更令人困惑的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();

    【讨论】:

      【解决方案2】:

      这样写一个扩展方法:

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

      忘记它

      【讨论】:

      • 我是 .net 3.5 世界的新手,我忘记了这个功能,我试试看,谢谢。
      【解决方案3】:

      试试这个:

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

      然后:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多