恒等比较¶
ID: cs/constant-comparison
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- correctness
Query suites:
- csharp-security-and-quality.qls
始终产生相同结果的比较是不必要的,并且可能表明逻辑中存在错误。当其中一个操作数的数据类型的值范围有限时,就会发生这种情况。例如,无符号整数始终大于或等于零,而 byte 值始终小于 256。
以下表达式的结果始终相同
Unsigned < 0始终为 false,0 > Unsigned始终为 false,0 ≤ Unsigned始终为 true,Unsigned ≥ 0始终为 true,Unsigned == -1始终为 false,Byte < 512始终为 true。
建议¶
检查程序逻辑,以确定是否需要进行比较。可以更改数据类型,也可以删除不必要的代码。
示例¶
以下示例尝试从 numberOfOrders 倒计时到 0,但是循环永远不会终止,因为 order 是一个无符号整数,因此条件 order >= 0 始终为 true。
for (uint order = numberOfOrders; order >= 0; order--)
ProcessOrder(order);
解决方案是更改变量 order 的类型。
参考¶
MSDN 库:C# 运算符。