恒等比较¶
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# 运算符。