javascript - 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 或三元运算符。
解决方案
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)
。
推荐阅读
- bash - Makefile:遍历文件夹并将文件合并到一个新文件中
- sql - 如何在我的代码中编写以排除在过去 45 天内已发布付款的帐户?
- kotlin - 懒惰的 Kotlin 抛出 NullPointerException
- firebase - 参数'设置
>>> Function(String)' 不能分配给参数类型'void Function(String, dynamic)' - redcap - 计算字段 - 使用数字 e 的公式
- web - 用于研究目的的网站集成的最佳聊天机器人服务(2021 年)
- javascript - select 的函数输出
- php - Laravel 查询构建器 SQL 为分组月份中的每一天添加最新记录
- android - 如何在android中设置初始拥塞窗口大小?
- sql - 无人机管理数据库设计