【问题标题】:can this sort of weird conditional statement in c# work? [duplicate]c#中这种奇怪的条件语句可以工作吗? [复制]
【发布时间】:2021-11-13 12:00:04
【问题描述】:

if (!d1.x0((long) d1.x1, out d2) || d1.x2 != 0 && d1.x2 != e1.x3 || d1.x4 != x4.None && d1.x4 != e1.x5 || d1.x6 != 0UL && (long) d1.x6 != e1.x6)

我在生产 C# 代码中发现了这一点(为了匿名而替换了 var 名称),我不明白该语句是否可以在 C# 中工作?或者其他语言?

我认为|| 需要与() 明确分组,如果与&& 混合使用

【问题讨论】:

标签: c#


【解决方案1】:

如果它在 C# 中编译,它就可以工作。这并不意味着它是正确的。随着您的变量名更改,它是https://WorseThanFailure.com - 值得阅读和推理。

如你所知,语言计算 && 和 ||运算符,没有任何括号,从左到右,具有相同的运算符优先级。但是有条件!在a && b 中,如果a 为假,则不评估b。类似的规则适用于 ||。

所以这很可能是正确的。如果它在生产代码中,并且您没有在这部分代码中寻找错误,那么您最好不要碰它。如果你重写它,你必须完全理解所需的应用程序逻辑。而且,您必须非常仔细地检查您的重写并测试生成的代码:众所周知,这种逻辑在您重写时很容易搞砸。

C# 得到了这个 && / ||来自C语言的东西。 C++、Java、Javascript 和许多其他语言也是如此。它非常有用。花在熟练掌握它上的时间是值得的。

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多