误导性缩进¶
ID: cs/misleading-indentation
Kind: problem
Security severity:
Severity: warning
Precision: medium
Tags:
- changeability
- correctness
- logic
Query suites:
- csharp-security-and-quality.qls
控制结构(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());
}
}
参考¶
MSDN 文档:if-else(C# 参考)