2009-01-08 13 views
9

me sale el siguiente error de compilación con el siguiente código:anulable Enum tipo anulable pregunta

error de compilación:

Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre '' y 'MyEnum '

Código Fuente

public enum MyEnum 
{ 
    Value1, Value2, Value3 
} 

public class MyClass 
{ 
    public MyClass() {} 
    public MyEnum? MyClassEnum { get; set; } 
} 

public class Main() 
{ 
    object x = new object(); 

    MyClass mc = new MyClass() 
    { 
     MyClassEnum = Convert.IsDBNull(x) : null ? 
      (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true) 
    }; 
} 

¿Cómo puedo solucionar este error?

+0

posible duplicado de [tema tipo anulable con el operador?: Condicional] (http://stackoverflow.com/questions/295833/nullable-type-issue-with -conditional-operator) – nawfal

Respuesta

17

Creo que sólo tiene que emitir el resultado de Enum.Parse a MyEnum?. Este es el caso con Ints Nullable al menos. Por ejemplo:

int? i; 
i = shouldBeNull ? null : (int?) 123; 

Así:

MyClassEnum = Convert.IsDBNull(x) 
    ? null 
    : (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true) 
+4

MyClassEnum también debe ser anulable (obviamente). –

+0

Gracias ... Eso resolvió mi problema. –

+0

Para ser claros, esto solo ocurre porque estás usando el operador ternario – basarat

3

Creo que solo tendrá que emitir el resultado a (MyEnum?) En lugar de (MyEnum)?

11

Hay un error de sintaxis en su código: la posición de ':' y '?' hay que cambiar:

MyClassEnum = Convert.IsDBNull(x) ? null : 
      (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true) 

Por cierto:

por lo que yo sé, el método recomendado es usar un elemento enum llamado 'Ninguno' en lugar de una enumeración anulable, por ejemplo:

public enum MyEnum 
{ 
    None, Value1, Value2, Value3 
} 

y

MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None : 
      (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true); 
Cuestiones relacionadas