通常,短路or
运算符||
忽略或右侧的或如果左侧评估为真。显然,我们发现了一个例外。布尔或包含三元条件运算不会被短路
检查了以下工作:
if (foo == null || bar != true ? foo.Count == 0 : true)
{
}
此代码抛出的命令foo.Count
因为foo
是空一空引用异常。自然,布尔逻辑允许这样做。但是,如果foo
为空,那么您会期望or
会短路,甚至不评估表达式的右侧,但它仍然存在,并且会引发异常。
这是我的代码或C#编译器中的错误吗?是否有C#规范的一部分处理这种情况?
当您使用它们时,可能需要添加一些代码来设置对象('foo'和'bar')。 –
@ m1m1k抛出什么异常? –
@GeorgeStocker'这段代码在命令foo.Count上抛出一个空引用异常' –