JavaScript中的逻辑运算符&&,等效于C#

时间:2019-11-13 19:47:55

标签: javascript c# null conditional-statements

在JavaScritp运算符&&中,可以用来调用类似的函数

possibleNull && possibleNull.do()

此方法仅可能对null的null对象执行do()方法。可以用?处理。操作员。但是我找不到C#的替代品

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

在JS的“左&&右”表达式中,当将左变量评估为“真”(通常不为null-> JS中的情况更多)时,将返回(或执行)右变量。

我知道||的C#替代方法几乎相同的JS运算符(??运算符)。 还有&&的对应对象吗?

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

我想实现类似的目标

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

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

3 个答案:

答案 0 :(得分:0)

您真正要问的是逻辑运算符“短路”,如果多条件测试中的第一个条件失败,则语句处理会停止。

C# works just as JavaScript does在这方面:

& Logical AND
&& Logical AND with short-circuiting
| Logical OR
|| Logical OR with short-circuiting

答案 1 :(得分:0)

如果您想通过OO解决您的问题。为什么不实现空模式?

我不知道Foo是否具有您所处的接口或该接口是否可以合理实施。

但是不要用空检查乱七八糟的代码,而应该让所有空行为无所适从。 (例如,如果对象为null,则记录某些内容)

做类似

public interface IFoo { void Do(); }

public class Foo : IFoo { void Do() { /* all that stuff you wanna do */ } }

public class NullFoo : IFoo { void Do { /*log that do cannot be called on nullFoo because Foo with Code X could not be found */ } }

Foo可能来自回购或工厂,当您看到它们无法实例化时。不用让客户端检查null,只需返回NullFoo,让它调用Do(不执行任何操作或记录无法找到它的日志),然后继续进行下去:)

希望这会有所帮助!

答案 2 :(得分:0)

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

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

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

x && y的工作方式如下:如果x强制为false,则返回x。如果x强制为true,则返回y。

C#的工作原理相同,仅适用于布尔操作数。如果x为false,则返回x(false)。如果x为true并且y为false,则返回y(false)。如果x为true,y为true,则返回y(true)。

现在,这对于像JS中那样编写短代码并不是真正有用。可能最好的方法是if (foo != null) processFoo(foo)或三元foo == null ? getNewFoo() : processFoo(foo)