CodeQL 文档

无用的 ?? 表达式

ID: cs/coalesce-of-identical-expressions
Kind: problem
Security severity: 
Severity: error
Precision: medium
Tags:
   - maintainability
   - language-features
   - external/cwe/cwe-561
Query suites:
   - csharp-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

编写一个左右操作数都执行相同操作的 null 合并表达式的情况很少见,但并非不可能。其后果通常是灾难性的 - 由于 null 合并表达式通常用于在变量为 null 时执行特殊操作,因此未能处理该(显然是预期)情况通常会导致 NullReferenceException ,无论是在程序执行的立即还是稍后阶段。

建议

重写 null 合并表达式的 else 部分,以便在变量为 null 时提供合适的替代项。

示例

此示例演示了一个旨在生成随机数的简单类。其核心是一个名为 generatorRandom 实例。为了提高效率,程序员选择在首次需要之前不初始化生成器。由于 null 合并表达式的两侧都相同,因此 generator 永远不会被初始化,并且在尝试调用 Next 时会发生 NullReferenceException

class UselessNullCoalescingExpression
{
    private static Random generator;

    private static int RandomNumber()
    {
        // This should probably have said "generator ?? new Random()".
        generator = generator ?? generator;
        return generator.Next();
    }

    static void Main(string[] args)
    {
        Console.WriteLine(RandomNumber());
        Console.WriteLine(RandomNumber());
        Console.WriteLine(RandomNumber());
    }
}
  • ©GitHub, Inc.
  • 条款
  • 隐私