2017-07-30 41 views
0

在C#中,很多時候我想根據表達式檢索字符串。我大部分時間都是在意見中這樣做的。當你只想要一個結果時,是否有三元合成糖?

因此,舉例來說,如果我想打印基於一個布爾isComplete「完成」,我需要這樣做:

<span class="badge">@(isComplete? "Complete" : "")</span> 

是否有語言會縮短這個語法的選項,所以我不需要也有空字符串選項?

喜歡的東西

<span class="badge">@(isComplete => "Complete")</span> 

有一些方法自己做,這樣會得到一個字符串和一個布爾值,並返回null或空,如果布爾是假的功能,但也許它已經存在在語言中。

+0

雖然我認爲這個問題會爲是有人用真正的答案之前「過於寬泛」可以在此灑下的光被關閉。 – Phiter

+0

對我沒有意義;不僅儲蓄極少,它在可讀性方面似乎也很可疑。爲什麼要成爲自然分配而不是分配?當然對於其他數據類型,其他默認值也適用。對於對象,什麼,null? – TaW

回答

1

你可以簡單地聲明函數是這樣的:

public String GetTextOrEmpty(bool control, String text) 
{ 
    return control? text : ""; 
} 

,然後調用它像這樣:

<span class="badge">@(GetTextOrEmpty(isComplete, "Complete"))</span> 
+0

是的,我就像我在問題中所說的那樣。但功能太明顯了。爲了做到這一點,有沒有辦法擴展運營商? – Phiter

+0

我不這麼認爲。但讓我們看看是否有其他人有任何想法。 –

+0

讓我們希望。 C#是一種美麗的語言,充滿了合成糖,如果像這樣的東西還不存在,它會給我留下深刻的印象。 – Phiter

0

還沒有,但這裏有幾個選擇:

<span class="badge">@isComplete.Complete()</span> - 擴展方法

<span class="badge">@Complete(isComplete)</span> - 方法

<span class="badge">@(Complete)isComplete</span> - 自定義類型explicit operator

<span class="badge">@isComplete</span> - 自定義的布爾類型與override ToString

相關問題