2013-07-08 82 views
2

C#我知道你可以做這樣的事情:是否有三元運算符在c#中運行函數?

int number = true ? 1 : 0; 

這將返回左側或右側,這取決於如果Boolean是真還是假。

但有沒有辦法做同樣的事情,而是運行一個函數,而不是返回一個值?事情是這樣的:

這並不工作(我得到多個語法錯誤)

WPS.EDIT_MODE ? ExecuteEditMode() : ExecutePublicMode(); 

感謝。

+0

這不正常嗎?如果兩個函數都返回一個我期望的int。 – DoctorMick

+0

看一看http://stackoverflow.com/questions/2765360/ternary-operators-in-c-sharp?rq=1 – jltrem

回答

9

條件運算符必須返回一個值。假設函數不都爲您返回一個有意義的值,你應該使用if語句來做到這一點:

if(someCondition) 
    doA(); 
else 
    doB(); 

儘管從技術上說,你可以使用匿名函數來做到這一點,如果你真的

int number = someCondition ? 
    new Func<int>(() => { doA(); return 0; })() : 
    new Func<int>(() => { doB(); return 1; })(); 

但這並不是建議;對於這種情況,使用if/else更容易且更易讀。

+0

我更新了我的問題。所以我猜如果函數不返回任何東西,if else是最好的方法。如果他們返回一些東西,但是不把它分配給一個變量呢? – omega

+0

@omega我認爲函數從一開始就是無效的;你的編輯並沒有改變我答案的有效性。 – Servy

4

如果兩個函數都返回int,是的。

三元運算符是關於返回值的。不返回值是沒有意義的。

條件運算符(?:)根據 返回布爾表達式的值中的兩個值之一。

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx

+0

他特別說*而不是返回一個值*,這意味着他們不會。 – Servy

+0

我更新了我的問題。如果他們沒有返回價值會怎麼樣。 – omega