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



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

possibleNull && possibleNull.do()

此操作只执行possibleNull对象的do((方法,possibleNull对象的do方法不为null。这可以由?处理?。操作人员然而,我找不到的C#替代品

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

在JS中的"left&&right"epxression中,当左变量被求值为"true"时(通常不是null->尽管JS中有更多的情况(,右变量被返回(或执行(。

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

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

我想实现类似的目标

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

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

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

C#在这方面的工作原理与JavaScript一样:

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

如果您想要一个OO解决方案来解决您的问题。为什么不实现null模式?

我不知道Foo在您的情况下是否有接口,或者它是否可以合理地实现。

但是,与其在你的代码中到处都是空检查,也许还有所有的空行为。(比如如果对象为空,则记录一些东西(

做一些类似的事情

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,它什么也不做,或者记录找不到它,然后继续它的一天:(

希望这能有所帮助!

&C#中的运算符和JavaScript中的一样工作,但仅适用于bool操作数。您可以在JavaScript中拥有任何类型的操作数。

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

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)

相关内容

  • 没有找到相关文章

最新更新