2012-09-17 18 views
6

Czy istnieje sposób uruchomienia metody na podstawie instrukcji warunkowej, takiej jak operator koalescent/ternary typu null?Szybki/łatwy sposób na uruchomienie metody opartej na warunku

Czasami mam coś takiego w moim kodu:

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

Czy istnieje sposób mogę mieć coś takiego:

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

LUB

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

Interesujące pytanie. –

+0

Przepraszam za moją niewiedzę, ale czy trzecia z nich nie zadziała? – npinti

+1

Nie rób tego, * wyczyść * jest lepsza niż * krótka * jeśli chodzi o kod. To może teraz wyglądać ładnie, ale jeśli wrócisz do tego w przyszłym roku, pomyślisz "święta matka kodu źródłowego to jest paskudne". to dlatego, że zapomniałeś, co ma robić. – Alex

Odpowiedz

8

Jest to możliwe, ale nie jest przydatny. Oświadczenie if jest znacznie lepsze.

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

Yuk. +1 za ostrzeżenie o czytelności. Trzymaj się 'if'. – spender

+0

Dodałbym zalecenie przeczytania książki "Code Complete" Steve'a McConnella. –

+0

Dzięki! Zasadniczo jest to niemożliwe w C# 2.0? – rtuner

3

Możesz napisać taką linię:

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

jednak jedyna różnica to kod dodaje do wyciągu if jest mniejsza wydajność ze względu na budowę delegatów. To nie jest dobry pomysł.

1

może być coś takiego:

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

Prosta, szybka i krótka droga.

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

Dzięki, faktycznie skończyłem używać czegoś takiego, mimo że nie było to odpowiedź, której szukałem. – rtuner

Powiązane problemy