2012-09-18 28 views
26

Me gustaría hacer una sola línea si la instrucción con más de 1 acción.Línea única declaración if con 2 acciones

por defecto es la siguiente:

(if) ? then : else 

userType = (user.Type == 0) ? "Admin" : "User"; 

Pero no necesito un "otro" solamente, necesito un "else if"

así en línea de múltiples:

if (user.Type == 0) 
    userType = "Admin" 
else if (user.Type == 1) 
    userType = "User" 
else if (user.Type == 2) 
    userType = "Employee" 

¿Hay una posibilidad para eso en una sola línea?

+0

Creo que este es un caso en el que 'enum' es mejor, si algunas de tus API usan enteros y otras usan cadenas, puede haber anomolías de actualización si olvidas actualizar lo que significa cada acoplamiento. – Matthew

Respuesta

63

suena como usted realmente quiere un Dictionary<int, string> o, posiblemente, una declaración switch ...

Usted puede hacerlo con el operador condicional sin embargo:

userType = user.Type == 0 ? "Admin" 
     : user.Type == 1 ? "User" 
     : user.Type == 2 ? "Employee" 
     : "The default you didn't specify"; 

Mientras podía poner esto en una línea, le recomiendo encarecidamente que no lo haga.

Normalmente, solo lo hago por diferentes condiciones, no solo por varios valores diferentes posibles, que se manejan mejor en un mapa.

+0

Jon, eso es demasiado creo ... ¿Por qué complicarlo aún más? (Por cierto, me alegro de verte pasando por la misma pregunta que yo :) –

+0

@ H2CO3: ¿Qué versión estás diciendo es más complicado? Queremos asignar un número entero a una cadena; un diccionario parece ser el enfoque más natural para mí. –

+0

Me refiero al diccionario. Siento que es más bien la "buena práctica" lo que te atrapó aquí. Por supuesto, puedes usar un diccionario, pero puedes usar una matriz, los índices son del tipo del usuario (que en realidad deberían ser enteros consecutivos, probablemente una enumeración), y para 3 enteros simples, el operador ternario no es ¡así de mal! Personalmente, no creo que sea ilegible en absoluto. La declaración de cambio es obviamente mejor (desde mi punto de vista), si consideras '?:' Ilegible, prefiero sugerir el uso de 'switch'. –

6

puede escribir eso en una sola línea, pero no es algo que alguien podría leer. Guárdelo como usted ya lo escribió, ya es hermoso por sí mismo.

Si usted tiene demasiado if/else construcciones, es posible pensar en usar de diferentes estructuras de datos, como Dictionaries (para buscar las llaves) o Collection (para ejecutar condicionales LINQ consultas sobre ella)

16
userType = (user.Type == 0) ? "Admin" : (user.type == 1) ? "User" : "Admin"; 

debe hacer el truco.

Cuestiones relacionadas