【问题标题】:Getting StyleCop rule SA1503 CurlyBracketsMustNotBeOmitted to be more flexible获取 StyleCop 规则 SA1503 CurlyBracketsMustNotBeOmitted 更灵活
【发布时间】:2009-06-09 17:19:31
【问题描述】:

我很难使用 StyleCop 规则 SA1503 (CurlyBracketsMustNotBeOmitted)。

在我的代码中,我经常有这样的模式:

public void SomeFunction(string someArg)
{
    if (string.IsNullOrEmpty(someArg)) throw new ArgumentNullException("someArg");

    // rest of the function here
}

这样做的基本原理是在对单个参数进行多次验证检查和/或检查多个参数时节省垂直空间。这种检查的逻辑通常简单明了,对于抛出的异常也是如此。

但是,我从不

if (someConditional)
    DoSomeStuff();

我会一直写

if (someConditional)
{
    DoSomeStuff();
}

总之:

  • 如果 if 语句被分成多行,则使用大括号
  • 不要使用大括号进行简单的参数验证等可以轻松(且易读)放在一行中

StyleCop 可以帮我吗?

【问题讨论】:

  • @Richard E:你最终做了什么?我不想禁用规则,但我希望像您描述的模式那样编写我的先决条件。
  • @Lieven:我们暂时保留了这条规则,并决定在我们的单行条件句中使用大括号。为此我们关闭了 StyleCop 规则 SA1501。
  • OffTopic:如果变量为空字符串,不要抛出 ArgumentNullException,你应该只将它用于空参数
  • @VitaliyUlantikov - 你会为空字符串抛出什么异常?

标签: stylecop


【解决方案1】:

如前所述,不幸的是 StyleCop 规则要么开启要么关闭,并且无法自定义。有一种自定义规则的简单方法会很好,但不幸的是,您需要从头开始编写它们。

我使用 StyleCop 的方式是专注于使用尽可能多的内置规则,如果我确实对规则有基本问题(例如代码文档),我只是将其关闭。我不太关心例外情况,以至于无法编写自定义规则。

【讨论】:

  • 完全同意;我们发现,经过几周的调整以适应“按照 stylecop 所说的去做,不要再争论了”的态度,已经导致多年无压力、高度可读的代码。
【解决方案2】:

StyleCop(我同意这里)希望您将其拆分为多行。它不喜欢一行中的 if 语句,因为(可以说)有充分的理由 - 这会导致 if 语句的使用模式不一致,这是该规则首先存在的原因之一。

要获得您所显示的行为,您可能需要使用 SDK 为该特定情况编写自己的自定义规则,然后禁用默认规则。

【讨论】:

  • 介意详细说明原因是什么?很长一段时间以来,我都喜欢在函数的开头使用单行 if 语句。例如:if (data.empty) return; 3 行看起来有点奇怪。
  • @basher 如前所述“这会导致 if 语句的使用模式不一致” - 这是否是一个问题是有争议的,但这是一个潜在的有价值的原因
  • 很公平。谢谢里德。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2013-01-26
相关资源
最近更新 更多