2

C# 是否有等效于 JavaScript 的赋值语法var x = y || z;?万一你不知道,结果不是true/false。如果y已定义,则将其分配给x,否则即使未定义也z将分配给。x

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

4

6 回答 6

6

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

MSDN 参考

于 2013-05-09T19:45:59.797 回答
3
var abc = blah ?? "default";

是的

于 2013-05-09T19:46:20.933 回答
3

这就是你要找的

var x = y ?? z;
于 2013-05-09T19:46:34.550 回答
1

与 JavaScript 不同,C# 不是动态语言,而是静态语言,因此这种操作是不可能的——会发生编译错误。

想象一下你正在写这个if

if(pizzaPrice == hamburgerPrice)

在先声明变量之前:

decimal pizzaPrice;
decimal hamburgerPrice;

编译时会发生错误。

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

另一方面,JavaScriptif通过调用ToBoolean方法来强制对条件中的变量进行评估,如果它等于或等于undefined,而C# 不包含这种行为。nullfalse

看看这篇很酷的文章:JavaScript 陷阱:null、false、undefined、NaN

但是如果你想检查一个变量是否引用了一个null你可以很容易地使用空合并运算符 “??” 操作员。

如下:

var x = y ?? z;
于 2013-05-09T19:53:04.097 回答
1

在 C# 中,没有变量未定义的概念。这样的运算符在 C# 中没有意义。

于 2013-05-09T19:45:23.023 回答
0

就在这里:??

string x = y ?? z;

这基本上计算:

string x = y != null ? y : z

但是,Javascript 和 C# 之间存在一些差异。与 JS 一样,yz必须事先声明。但是,与 JS 不同,y它也z必须在 C# 中“赋值”,否则将照常抛出编译器错误。

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

请注意,零长度字符串为空。

于 2013-05-24T14:07:39.357 回答