2012-03-01 50 views
3

C#是否具有類似JavaScript if或value語法的內容?C#內嵌if或值語法

例如,我知道你可以在JavaScript中做到這一點:

var test = someValue || thisValue; 

如果someValue中是不確定的,虛假的,或空字符串,然後測試變得thisValue。然而,我從來沒有見過一種方式在C#中執行此操作,而不是傳統的if或inline if。

+0

感謝所有的好評! – farina 2012-03-01 20:13:42

回答

3

NullCoalesce

var test = someValue ?? thisValue; 

然而,C#不會做奇怪的JavaScript falsey行爲。

C#中的短路評價是evaulating的bo​​ol更相關:

private bool EvaluateA() 
{ 
    return true; 
} 

private bool EvaluateB() 
{ 
    return false; 
} 

public static int main() 
{ 
    Console.Write(EvaluateA() || EvaluateB()); // EvaluateB is never called 
} 
+0

你需要把它作爲OR,否則,'EvaluateB()'仍然會被調用。 或者讓EvaluateA()'返回false;'然後'EvaluateB()'永遠不會被調用。 – DevinB 2012-03-01 18:43:20

+0

也有'三元'運營商可能是有用的OP。 – DevinB 2012-03-01 18:44:57

+0

T || (Anyhting,True或False)== True,F &&(任何東西,T或F)都是false。短路的意思是,它將評估第一個參數,如果它只需要返回一個結果,它就根本不會評估第二個參數。 – nycynik 2012-03-01 18:54:32

2

其所謂的空合併運算符。

String someValue = null; 
var thisValue = "Foo"; 
var test = someValue ?? thisValue; 
// test will be == "Foo" 

正如評論所說,這並不爲空字符串工作,「假」,等等。你可以用C#做​​的是編寫擴展方法來做到這一點,如果你真的想:

public static class MyStringThing { 
    public static String FixErUp(this String s1, String s2) { 
     if (String.IsNullOrWhiteSpace(s1) || s1.Equals("false")) 
      return s2; 
     return s1; 
    } 
} 

使用像這樣:

String someValue = "false"; 
var thisValue = "Foo"; 
var test = someValue.FixErUp(thisValue); 
// test will be == "Foo" 
+0

要注意 - 這隻適用於空實例,不適用於假/空字符串。 – asawyer 2012-03-01 18:37:24

2

使用??

var test = someValue ?? thisValue; 

這僅適用於someValue爲空的情況。要檢查falsestring.Empty,您需要使用正常的if聲明。

1

不是。但它確實沒有合併。

給定一個參考類型,如果它是null,您可以獲得該值或替代值。

string foo = null; 
string value = foo ?? "bar"; // value == "bar" 

否則任何其他情況下(即非空,所有的空格,值類型等),你就必須做其他形式的檢查。

string foo = ""; 
string value1 = foo ?? "bar"; // value1 == "" 
string value2 = !String.IsNullOrEmpty(foo) ? foo : "bar"; // value1 == "bar"