C#是否具有JavaScript if或value语法?
例如,我知道您可以在JavaScript中执行此操作:
var test = someValue || thisValue;
如果 someValue 未定义,false或空字符串,则测试变为 thisValue 。但是,除了传统的if或inline之外,我从未在C#中看到过这样做的方法。
答案 0 :(得分:3)
var test = someValue ?? thisValue;
但是,C#并没有做出奇怪的JavaScript假冒行为。
C#中的短路评估在评估bool时更为恰当:
private bool EvaluateA()
{
return true;
}
private bool EvaluateB()
{
return false;
}
public static int main()
{
Console.Write(EvaluateA() || EvaluateB()); // EvaluateB is never called
}
答案 1 :(得分:2)
它称为null-coalescing运算符。
String someValue = null;
var thisValue = "Foo";
var test = someValue ?? thisValue;
// test will be == "Foo"
正如评论中所提到的,这不适用于空字符串,“false”等。如果你真的想要,你可以在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"
答案 2 :(得分:2)
使用??
var test = someValue ?? thisValue;
仅当someValue
为空时才有效。要检查false
或string.Empty
,您需要使用正常的if
语句。
答案 3 :(得分: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"