2009-06-09 60 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爲特定情況編寫自己的自定義規則,然後禁用默認規則。