2012-08-16 25 views
30

¿Cómo escribiré una declaración IF en línea en mi clase de servicio C# cuando establezca mi valor enum según lo que devuelve la base de datos?Declaración IF en línea en C#

Por ejemplo: Cuando el valor de la base de datos devuelto es 1, establezca el valor enum en VariablePeriods, cuando 2 luego FixedPeriods.

Espero que pueda ayudar.

Respuesta

56

La respuesta literal es:

return (value == 1 ? Periods.VariablePeriods : Periods.FixedPeriods); 

Nótese que la línea if, al igual que una sentencia if, sólo verifica si hay verdadera o falsa. Si (valor == 1) se evalúa como falsa, puede ser que no necesariamente significa que el valor == 2. Por lo tanto, sería más seguro así:

return (value == 1 
    ? Periods.VariablePeriods 
    : (value == 2 
     ? Periods.FixedPeriods 
     : Periods.Unknown)); 

Si agrega más valores de una línea si se convertirá en ilegible y una sería preferible interruptor:

switch (value) 
{ 
case 1: 
    return Periods.VariablePeriods; 
case 2: 
    return Periods.FixedPeriods; 
} 

lo bueno de las enumeraciones es que tienen un valor, por lo que puede utilizar los valores para el mapeo, como sugirió user854301. De esta forma, puedes evitar las ramas innecesarias, lo que hace que el código sea más legible y extensible.

+0

@Ysterhak: Me alegro de que haya ayudado.Todavía me pregunto por qué prefieres la ramificación sobre el uso de un molde como lo sugiere el usuario854301 – chiccodoro

4

Se puede hacer en línea con IFS

return y == 20 ? 1 : 2; 

que le dará 1 si es verdadero y 2 si es falso.

12

Es posible definir su enum como tal y usar fundido donde sea necesario

public enum MyEnum 
{ 
    VariablePeriods = 1, 
    FixedPeriods = 2 
} 

Uso

public class Entity 
{ 
    public MyEnum Property { get; set; } 
} 

var returnedFromDB = 1; 
var entity = new Entity(); 
entity.Property = (MyEnum)returnedFromDB; 
+0

como éste, ya que evita la ramificación. – chiccodoro

+0

Ya tengo esto en mi clase de entidad. Necesito configurar el Enum de acuerdo con lo que devuelve el DB en mi clase de servicio. Es por eso que tengo que hacer una declaración IF en línea? – Landi

+0

No, simplemente puede configurarlo como la propiedad que necesita – user854301

0

Enum a int: (int)Enum.FixedPeriods

Int a Enum: (Enum)myInt

Cuestiones relacionadas