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那样执行“虚假”值,因此??
运算符不会考虑空字符串。
感谢您的时间和精彩的回复!
答案 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)