2011-07-11 13 views
13

tengo la siguiente enumeración:a Boolean La conversión cuestión

public enum MyEnum 
{ 
    MyTrue, 
    MyFalse 
} 

Y me gustaría a tiempo será capaz de convertir automáticamente mi enumeración a un valor booleano, con una línea simple como esto:

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

Actualmente, tengo que hacer esto:

bool IsThisTrue = val == MyEnum.MyTrue; 

¿existe algún mecanismo que puedo aplicar a mi correo numeración para permitir el enum nativo -> bool de fundición? Me pregunto si alguna variante de un typeconverter es lo que necesito o no.

Gracias

Editar: Hay una razón de mi enumeración personalizada. Dado que todas estas propiedades están finalmente vinculadas a una cuadrícula de propiedades, tenemos mecanismos establecidos para vincular todas nuestras enumeraciones personalizadas a cadenas multilingües en archivos de recursos. Necesitamos todas las enumeraciones que estamos usando para estar en un espacio de nombre específico, de ahí la clase "MyEnum".

Respuesta

16

Esa línea funcionaría solo con un operador implícito de conversión estática (o tal vez el operador más confuso true(), pero eso rara vez se ve en la naturaleza). No puede definir operadores en enumeraciones, por lo que, en última instancia, la respuesta es: no.

Usted podría , sin embargo, escribir un método de extensión en MyEnum para volver true o 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 
     } 
    } 
} 

entonces puede utilizar bool IsThisTrue = val.Value();

13

Escribir un método de extensión de esta manera:

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

y olvidarse de él

+0

Soy nuevo en el mundo .net 3.5, olvidé que existía esta característica, lo intentaré, gracias. – greggorob64

2

Prueba esto:

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

a continuación:

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

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