2012-11-15 28 views
2

C#是否對JavaScript的||有類似的操作?設定裝置?C#是否有類似於JavaScript的操作||二傳手?

例如,在JavaScript中,如果我要檢查,如果值是零,並設置一個默認的,我可以做這樣的事情:

function foo(val){ 
    this.name = val || "foo"; 
} 

但是,當我想在C#中這個功能我有走這條路線:

public Foo(string val) 
{ 
    this.name = (string.IsNullOrEmpty(val) ? "foo" : val); 
} 

我知道這是小和乞丐不能挑肥揀瘦,但是,如果可能的話,我想,以避免越來越涉及瘋狂的黑客或擴展方法的任何答案。我對使用三元運算符很好,但我只是好奇是否有我錯過的語言功能。

更新:

偉大的答案周圍的一切,但J0HN和安東打它的頭。在上面的例子中,C#不會像JavaScript那樣產生「falsy」值,所以??運算符沒有考慮空字符串。

感謝您的時間和很好的迴應!

回答

2

有一個??運營商基本上是一樣的COALESCE SQL中的操作符:

int? a = null; //int? - nullable int 
int q = a??1; // q is set to one; 

但是,??不會檢查字符串是否爲空,因此它與javascript的||的含義不同,它將空字符串也視爲false。

+0

我必須得到你的回答@ J0HN,因爲你提到它不會評估像JavaScript這樣的「falsy」值。 – elucid8

+1

@ elucid8,無論如何,你應該考慮如何處理一個空字符串。我最近剛剛遇到了使用'str!= null'導致的錯誤,其中'!String.IsNullOrEmpty(str)'應該是。 – J0HN

2

您可以使用??

private int Foo(string val){ 
    this.name = val ?? "foo"; 
} 
+0

這與'Foo'不一樣。 –

7

有一個在C#中的null-coalescing operator,儘管它不能處理JavaScript的一切詭詐:在JavaScript

this.name = val ?? "foo"; 

因爲空字符串是false,這個C#代碼的行爲與其JS代碼不同。

+6

值得一提的是,如果val是一個空字符串,則OP將無法達到期望的結果。 –

+0

我想標記你的答案是正確的。謝謝! – elucid8

2

轉到與此

this.name = val ?? "foo"; 
1

是的,使用??:

private int Foo(string val){ 
     this.name = val ?? "foo"; 
    } 

檢查MSDN上的更多信息:?? Operator

相關問題