2013-05-09 41 views
1

C#是否与JavaScript的作业语法var x = y || z;相当?如果你不知道,结果不是true/false。如果定义了y,则将其分配给x,否则z被分配给x,即使它未定义。C#相当于JavaScript“OR作业”

注意,在JavaScript中的变量仍必须声明:var test;

+1

“如果定义了y,则它被分配给x”。不完全的。如果'y'可以被当作一个假值(0,false,null),那么它是否被定义并不重要; x将被分配给z所保存的值。 - http://jsfiddle.net/8cMzK/ – 2013-05-09 19:53:00

+0

@TimMedora啊非静态类型语言的魔力。 – Servy 2013-05-09 19:55:51

+0

这就是为什么把它与c#中的空合并等同起来感觉很危险......有时它们的行为相似,但实际上它们有很大不同,部分原因是由于语言的根本差异。 – 2013-05-09 19:57:22

回答

5

我认为您在寻找??运营商。

MSDN Reference

+2

尽管这对大多数情况都有效,但它只能用于空数据。 – Nomad101 2013-05-09 19:46:31

1

在C#中有没有这样的概念作为变量没有被定义。这样的操作符在C#中没有意义。

+1

我不确定你是如何定义定义的,但最接近Javascript的未定义状态将是空或未分配。可能为空。 – 2013-05-09 19:50:52

+0

我当然知道它不是1对1的定义,但我们正在处理实用性,而null是分配给尚未实例化的对象的默认值,这与未定义的JavaScript相同。但是你是正确的。 – 2013-05-11 00:16:41

3
var abc = blah ?? "default"; 

没错

3

这是你在找什么

var x = y ?? z; 
1

不同的JavaScript,C#不是动态的,但静态语言,使这样的操作是不可能的 - 编译错误将会发生。

想象一下你正在写这if

if(pizzaPrice == hamburgerPrice) 

之前先声明变量:在编译时会发生

decimal pizzaPrice; 
decimal hamburgerPrice; 

错误。

更新: 即使声明变量也没关系,因为C#不支持这样的功能。

在另一方面,JavaScript是通过调用ToBoolean方法强制执行if条件变量的评价,如果它undefinednull等于false和C#不不包含这样的行为。

看看这个凉爽的文章:

但是,如果你想检查一个变量被引用到null您可以方便地使用null coalescing operator“??”运营商。

如下所示:

var x = y ?? z; 
+0

变量仍然需要声明。我应该早一点提及。 – 2013-05-09 20:02:00

+0

@ArlenBeiler请在答案中阅读我的更新。通常情况下,JavaScript在'if'条件下将'null'或'undefined'变量评估为'false'! – 2013-05-09 20:23:33

0

是的,有:??

string x = y ?? z; 

这基本上计算:

string x = y != null ? y : z 

不过,也有Javascript和C#之间的一些区别。和JS一样,yz都必须事先声明。但是,与JS不同,还必须在C#中“分配”yz,否则将像往常一样抛出编译器错误。

该运算符需要一个可为空的类型,并在返回第二个之前检查第一个是否为null。如果你愿意,你可以连锁一大堆(a ?? b ?? c ?? d ?? e)。

请注意,零长度字符串是而不是 null。