2012-09-17 48 views
6

有沒有辦法像null-coalescing/ternary運算符那樣運行基於條件語句的方法?快速/簡單的方法來運行基於條件的方法

有時候,我有這樣的事情在我的代碼:

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

有沒有一種方法可以讓我有類似:

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

OR

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

有趣的問題。 –

+0

我的無知道歉,但不會第三個工作? – npinti

+1

不要這樣做,*在代碼方面,* clear *比* short *好。現在看起來可能不錯,但如果你明年回到它,你會認爲「源代碼的聖母親這是討厭的」。那是因爲你會忘記它應該做什麼。 – Alex

回答

8

這是可能的,但它不是重新adable。 if聲明好得多。

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

Yuk。 +1關於可讀性的警告。堅持一個'如果'。 – spender

+0

我會添加一個閱讀Steve McConnell的「代碼完成」一書的建議。 –

+0

謝謝!所以基本上這在C#2.0中是不可能的? – rtuner

3

你可以寫這樣一行:

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

但是,此代碼添加到您的if聲明,唯一的區別是性能較低,由於委託的建設。這不是一個好主意。

1

可能是這樣的:

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

簡單,快速和簡便方法。

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

謝謝,我真的結束了使用這樣的事情,即使這不是我正在尋找的答案。 – rtuner