C#是否与JavaScript的作业语法var x = y || z;
相当?如果你不知道,结果不是true/false
。如果定义了y
,则将其分配给x
,否则z
被分配给x
,即使它未定义。C#相当于JavaScript“OR作业”
注意,在JavaScript中的变量仍必须声明:var test;
C#是否与JavaScript的作业语法var x = y || z;
相当?如果你不知道,结果不是true/false
。如果定义了y
,则将其分配给x
,否则z
被分配给x
,即使它未定义。C#相当于JavaScript“OR作业”
注意,在JavaScript中的变量仍必须声明:var test;
在C#中有没有这样的概念作为变量没有被定义。这样的操作符在C#中没有意义。
我不确定你是如何定义定义的,但最接近Javascript的未定义状态将是空或未分配。可能为空。 – 2013-05-09 19:50:52
我当然知道它不是1对1的定义,但我们正在处理实用性,而null是分配给尚未实例化的对象的默认值,这与未定义的JavaScript相同。但是你是正确的。 – 2013-05-11 00:16:41
var abc = blah ?? "default";
没错
这是你在找什么
var x = y ?? z;
不同的JavaScript,C#不是动态的,但静态语言,使这样的操作是不可能的 - 编译错误将会发生。
想象一下你正在写这if
:
if(pizzaPrice == hamburgerPrice)
之前先声明变量:在编译时会发生
decimal pizzaPrice;
decimal hamburgerPrice;
错误。
更新: 即使声明变量也没关系,因为C#不支持这样的功能。
在另一方面,JavaScript是通过调用ToBoolean
方法强制执行if
条件变量的评价,如果它undefined
或null
它等于到false
和C#不不包含这样的行为。
看看这个凉爽的文章:
但是,如果你想检查一个变量被引用到null
您可以方便地使用null coalescing operator“??”运营商。
如下所示:
var x = y ?? z;
变量仍然需要声明。我应该早一点提及。 – 2013-05-09 20:02:00
@ArlenBeiler请在答案中阅读我的更新。通常情况下,JavaScript在'if'条件下将'null'或'undefined'变量评估为'false'! – 2013-05-09 20:23:33
是的,有:??
string x = y ?? z;
这基本上计算:
string x = y != null ? y : z
不过,也有Javascript和C#之间的一些区别。和JS一样,y
和z
都必须事先声明。但是,与JS不同,还必须在C#中“分配”y
和z
,否则将像往常一样抛出编译器错误。
该运算符需要一个可为空的类型,并在返回第二个之前检查第一个是否为null。如果你愿意,你可以连锁一大堆(a ?? b ?? c ?? d ?? e
)。
请注意,零长度字符串是而不是 null。
“如果定义了y,则它被分配给x”。不完全的。如果'y'可以被当作一个假值(0,false,null),那么它是否被定义并不重要; x将被分配给z所保存的值。 - http://jsfiddle.net/8cMzK/ – 2013-05-09 19:53:00
@TimMedora啊非静态类型语言的魔力。 – Servy 2013-05-09 19:55:51
这就是为什么把它与c#中的空合并等同起来感觉很危险......有时它们的行为相似,但实际上它们有很大不同,部分原因是由于语言的根本差异。 – 2013-05-09 19:57:22