您真正要问的是逻辑运算符“短路”,如果多条件测试中的第一个条件失败,则语句处理会停止。
C# works just as JavaScript does在这方面:
& Logical AND
&& Logical AND with short-circuiting
| Logical OR
|| Logical OR with short-circuiting
,
如果您想通过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(不执行任何操作或记录无法找到它的日志),然后继续进行下去:)
希望这会有所帮助!
,
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)
。
本文链接:https://www.f2er.com/3107180.html