C#是否具有类似于JavaScript的操作';塞特?
C#是否具有与JavaScript的| | setter类似的操作 例如,在JavaScript中,如果我想检查值是否为null并设置默认值,我可以执行以下操作:C#是否具有类似于JavaScript的操作';塞特?,c#,javascript,language-features,null-check,C#,Javascript,Language Features,Null Check,C#是否具有与JavaScript的| | setter类似的操作 例如,在JavaScript中,如果我想检查值是否为null并设置默认值,我可以执行以下操作: function foo(val){ this.name = val || "foo"; } 但是,当我想在C#中实现这一功能时,我必须走这条路: public Foo(string val) { this.name = (string.IsNullOrEmpty(val) ? "foo" : val); } 我知
function foo(val){
this.name = val || "foo";
}
但是,当我想在C#中实现这一功能时,我必须走这条路:
public Foo(string val)
{
this.name = (string.IsNullOrEmpty(val) ? "foo" : val);
}
我知道这很小,乞丐不能挑三拣四,但如果可能的话,我想避免得到任何涉及疯狂黑客或扩展方法的答案。我可以使用三元运算符,但我只是想知道是否有我错过的语言功能
更新:
所有答案都很好,但J0HN和Anton击中了它的头部。C#不像上面示例中的JavaScript那样执行“falsy”值,因此?
操作符不考虑空字符串
感谢您的时间和巨大的反应 您可以使用
??:
private int Foo(string val){
this.name = val ?? "foo";
}
C#中有一个特殊的功能,尽管它不能处理JavaScript的所有古怪之处:
this.name = val ?? "foo";
由于JavaScript中的空字符串是false
,因此此C#代码的行为将与其JS对应的代码不同。遵循此规则
this.name = val ?? "foo";
是的,使用??:
private int Foo(string val){
this.name = val ?? "foo";
}
查看Msdn以了解更多信息:有一个??
操作符,该操作符本质上与SQL中的COALESCE
操作符相同:
int? a = null; //int? - nullable int
int q = a??1; // q is set to one;
但是,??
不检查字符串是否为空,因此它与javascript的|
的含义不同,后者也将空字符串视为假字符串。这与Foo
不同。值得一提的是,如果val是空字符串,OP将无法达到预期的效果。我必须回答您的问题,“J0HN,因为您提到它不会评估像JavaScript这样的“FLYSE”值。”无论如何,您应该考虑如何处理空字符串。我最近遇到了一个使用str导致的错误=空
其中!String.IsNullOrEmpty(str)
应为空。