2

C# 和 JavaScript 的 || 有类似的操作吗?二传手?

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

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

但是,当我想要 C# 中的这个功能时,我必须走这条路:

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

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

更新:

到处都是很好的答案,但是 J0HN 和 Anton 打了它的头。C# 不会像上面示例中的 JavaScript 那样执行“虚假”值,因此??运算符不考虑空字符串。

感谢您的宝贵时间和出色的回应!

4

5 回答 5

7

C# 中有一个null-coalescing 运算符,尽管它不能处理 JavaScript 的所有怪癖:

this.name = val ?? "foo";

由于 JavaScript 中存在空字符串false,因此该 C# 代码的行为与其对应的 JS 代码不同。

于 2012-11-15T14:28:03.357 回答
2

您可以使用??

private int Foo(string val){
    this.name = val ?? "foo";
}
于 2012-11-15T14:28:00.877 回答
2

和这个一起去

this.name = val ?? "foo";
于 2012-11-15T14:28:28.300 回答
2

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

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

但是,??它不检查字符串是否为空,因此它与 javascript 的含义不同||,后者也将空字符串视为 false。

于 2012-11-15T14:29:12.183 回答
1

是的,使用??:

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

查看 Msdn 了解更多信息:?? 操作员

于 2012-11-15T14:28:35.617 回答