con*_*boy 2 c# algorithm logic if-statement conditional-statements
我正在重构一个代码片段,在其中我看到了以下条件,我想知道它是否被简化了。
data.RecordId != 0 || (data.RecordId == 0 && data.SerialNum == "0000")
Run Code Online (Sandbox Code Playgroud)
不是data.RecordId == 0 || data.SerialNum == "0000"一样吗?
如果可能的话,怎么可能?能详细点吗?
是的,这是可能的,假设你有一个错字(!= 不是 ==)...
让 Wolfram Alpha 解释一下:
R!=0 ? (R = 0?S = 0)
被简化为:
R!=0 ? S = 0
一步一步的解释:
https://en.wikipedia.org/wiki/Boolean_algebra#Laws 分布?超过 ?说:
x v (y ? z) = (x ? y) ? (x ? z)
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
R! ? (R ? S) = (R! ? R) ? (R! ? S)
Run Code Online (Sandbox Code Playgroud)
where(R! ? R)始终为真,您可以将其省略为 and 逻辑中的第一个操作数:
R! ? (R ? S) = true ? (R! ? S)
R! ? (R ? S) = (R! ? S)
Run Code Online (Sandbox Code Playgroud)
瞧
但是我看到了另一种运行时差异,它处理 的快捷方式评估&&:
如果 data.RecordId == 0 在较长的表达式中为 false,则不会使用 data.SerialNum 评估正确的部分,这可以避免获得 null ref。
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |