C#的操作是否类似于JavaScript的||二传手?

时间:2012-11-15 14:26:33

标签: c# javascript language-features null-check

C#是否与JavaScript的||具有类似的操作设定器?

例如,在JavaScript中,如果我想检查一个值是否为null并设置默认值,我可以这样做:

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

但是,当我想在C#中使用此功能时,我必须走这条路:

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

我知道这很小,乞丐不能选择,但是,如果可能的话,我想避免得到任何涉及疯狂黑客或扩展方法的答案。使用三元运算符我很好,但是如果有一个我错过的语言功能,我只是很好奇。

更新

周围的答案很棒,但是J0HN和安东击中了它。 C#没有像上面示例中的JavaScript那样执行“虚假”值,因此??运算符不会考虑空字符串。

感谢您的时间和精彩的回复!

5 个答案:

答案 0 :(得分:7)

C#中有null-coalescing operator,但它无法处理JavaScript的所有怪癖:

this.name = val ?? "foo";

由于JavaScript中的空字符串是false,因此这个C#代码的行为与JS对应的代码不同。

答案 1 :(得分:2)

您可以使用??

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

答案 2 :(得分:2)

使用此

this.name = val ?? "foo";

答案 3 :(得分:2)

有一个??运算符与SQL中的COALESCE运算符基本相同:

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

但是,??不会检查字符串的空白,因此它与javascript的||没有相同的含义,它将空字符串视为false。

答案 4 :(得分:1)

是的,请使用??:

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

检查Msdn以获取更多信息:?? Operator