2009-06-09 49 views
5

我很难与StyleCop规则SA1503(CurlyBracketsMustNotBeOmitted)。获取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可以帮我吗?

+0

@Richard E:你最终做了什么?我不想破坏这个规则,但我希望写出像你描述的模式一样的前提条件。 – 2009-06-23 13:59:13

+0

@Lieven:暂时我们放弃了这条规则,并决定在我们的一行条件中使用大括号。为此,我们关闭了StyleCop规则SA1501。 – 2009-06-23 15:44:01

+0

OffTopic:如果变量是空字符串,不要抛出ArgumentNullException,你应该只用于空参数 – 2011-12-16 16:22:32

回答

7

如前所述,不幸StyleCop规则可以打开或关闭,不能自定义。有一个简单的自定义规则的方法会很好,但不幸的是,你需要从头开始编写它们。

我使用StyleCop的方式是专注于尽可能多地使用规则,并且在规则(例如代码文档)中确实存在基本问题,我只是关闭它。我并不关心写入自定义规则的例外情况。

3

StyleCop(我同意这里)希望你把它分成多行。它不喜欢在一行上的语句,因为(可以说)是很好的理由 - 这会导致if语句的使用模式不一致,这是首先存在规则的原因之一。

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