首页 > 解决方案 > JavaScript 中的逻辑运算符 && 和 C# 等效

问题描述

在 JavaScritp 中,运算符 && 可用于调用这样的函数

possibleNull && possibleNull.do()

这仅执行 possibleNull 对象的 do() 方法,可能的Null 对象不为空。这可以由 ? 处理。操作员。但是我找不到 C# 替代品

let foo = _fooProvider.GetFoo();
return foo && processFoo(foo);

在 JS 中的 "left && right" 表达式中,当左侧变量被评估为 "true" 时(一般不是 null -> JS 中还有更多情况),返回(或执行)右侧变量。

我知道 || 的 C# 替代方案 工作原理几乎相同的 JS 运算符(?? 运算符)。&&也有对应的吗?

编辑:我知道当两个操作数都是布尔值时 && 可以短路。但是,在 JS 中,您可以让右侧返回 bool 以外的其他内容。JS 中的左侧确实被解释器自动转换为布尔值,而右侧只是被评估并返回。

我想实现类似

public Foo Do(Foo arg)
...
var foo = _fooProvider.GetFoo();
return foo != null && Do(foo);

不使用 if-else 或三元运算符。

标签: javascriptc#nullconditional-statements

解决方案


C# 中的 && 运算符与 JavaScript 中的工作方式类似,但仅适用于bool操作数。JavaScript 中可以有任何类型的操作数。

JavaScript 使用类型强制 - 它将布尔值(真/假)分配给非布尔变量。

0               -> false
non-0 number    -> true
[]              -> false
non-empty array -> true
undefined, null -> false
{}              -> true

x && y在 JS 中是这样工作的:如果 x 强制为 false,则返回 x。如果 x 强制为真,则返回 y。

C# 的工作原理相同,仅使用 bool 操作数。如果 x 为假,则返回 x (假)。如果 x 为真且 y 为假,则返回 y(假)。如果 x 为真且 y 为真,则返回 y (true)。

现在这对于编写像 JS 这样的短代码并不是很有用。可能你能做的最好的是if (foo != null) processFoo(foo)or ternary foo == null ? getNewFoo() : processFoo(foo)


推荐阅读