2012-09-17 10 views
6

¿Hay alguna manera de ejecutar un método basado en un enunciado condicional como un operador ternario/nulo-coalescente?Manera rápida/fácil de ejecutar un método basado en una condición

A veces, tengo algo como esto en mi código:

if(Extender.GetSetting<string>("User") == null) 
{ 
    ConfigureApp(); 
} 
else 
{ 
    loadUser(); 
} 

¿Hay alguna manera de tener algo como:

Extender.GetSettings<string>("User")?? ConfigureApp() : loadUser(); 

O

Extender.GetSettings<string>("User") == null ? ConfigureApp() : loadUser(); 
+1

Interesante pregunta. –

+0

Disculpas por mi ignorancia, pero ¿no funcionaría la tercera? – npinti

+1

No lo hagas, * clear * es mejor que * short * cuando se trata de código. Esto podría verse bien ahora, pero si vuelves a hacerlo el próximo año vas a pensar "madre santa del código fuente, esto es desagradable". eso es porque habrás olvidado lo que se supone que debe hacer. – Alex

Respuesta

8

Es posible, pero no es re adable. La declaración if es mucho mejor.

(Extender.GetSettings<string>("User") == null ? (Action)ConfigureApp : loadUser)(); 
+0

Yuk. +1 para la advertencia sobre legibilidad. Quédate con un 'si'. – spender

+0

Agregaría una recomendación para leer el libro "Code Complete" de Steve McConnell. –

+0

Gracias! ¿Entonces básicamente esto es imposible en C# 2.0? – rtuner

3

Se puede escribir una línea como:

(Extender.GetSetting<string>("User") == null ? (Action)(()=>ConfigureApp()) : (Action)(()=>loadUser()))(); 

Sin embargo, la única diferencia que este código agrega a su declaración if es un rendimiento más lento debido a la construcción de los delegados. No es una buena idea.

1

puede ser algo como:

class Program { 
    static void Main(string[] args) { 
     String s = ""; 
     Launcher(s == "user1", A1, A2); 
     s = "user1"; 
     Launcher(s == "user1", A1, A2); 
    } 

    static void Launcher(Boolean b, Action a1, Action a2) { 
     if (b) { a1(); } else { a2(); } 
    } 

    static void A1() { 
     Console.WriteLine("action 1"); 
    } 

    static void A2() { 
     Console.WriteLine("action 2"); 
    } 
} 
1

manera simple, rápida y breve.

if (Extender.GetSetting<string>("User") == null) ConfigureApp(); else loadUser(); 
+0

Gracias, en realidad terminé usando algo como esto a pesar de que esta no era la respuesta que estaba buscando. – rtuner

Cuestiones relacionadas