CodeQL 文档

误导性缩进

ID: cs/misleading-indentation
Kind: problem
Security severity: 
Severity: warning
Precision: medium
Tags:
   - changeability
   - correctness
   - logic
Query suites:
   - csharp-security-and-quality.qls

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

控制结构(if 语句和循环)的主体可以是一组语句,也可以是单个语句。可以通过省略大括号来指示第二种情况:{}

但是,省略大括号可能会导致混淆,尤其是在代码缩进表明多个语句位于控制结构的主体中,而实际上并非如此时。

建议

在 C# 中,通常认为为所有控制结构都加上大括号是一种良好的做法。这是因为它可以更容易地维护以后的代码。例如,可以很容易地一眼看出代码的哪一部分在 if 语句的范围内,并且向 if 语句的主体添加更多语句也不太容易出错。

还应确保代码的缩进与实际的控制流一致,以免混淆程序员。

示例

在下面的示例中,if 语句在将项目 i 添加到列表之前检查它是否为 null。但是,if 语句不会保护对 Console.Out.WriteLine 的调用,从而导致每当将 null 传递给函数 AddItem 时都会出现 NullReferenceException

void AddItem(Object i)
{
    if (i != null)
        items.Add(i);
    Console.Out.WriteLine("Item added: " + i.ToString());
}

如下所示,通过在两个语句周围添加大括号 {} 来修复此代码。

void AddItem(Object i)
{
    if (i != null)
    {
        items.Add(i);
        Console.Out.WriteLine("Item added: " + i.ToString());
    }
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私