C#内联if或value语法

时间:2012-03-01 18:34:28

标签: javascript c#-4.0

C#是否具有JavaScript if或value语法?

例如,我知道您可以在JavaScript中执行此操作:

var test = someValue || thisValue;

如果 someValue 未定义,false或空字符串,则测试变为 thisValue 。但是,除了传统的if或inline之外,我从未在C#中看到过这样做的方法。

4 个答案:

答案 0 :(得分:3)

NullCoalesce

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为空时才有效。要检查falsestring.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"