2008-12-09 59 views
2

我陷入了ReSharper和StyleCop之間的爭鬥,我想讓ReSharper獲勝,但是我希望在我這樣做之前聽到贊成StyleCop的論點。什麼是不包裝長參數列表可能的理由? (StyleCop SA1115)

當我編寫長參數列表時,ReSharper明智地切出參數列表並在下一行重新啓動它。我發現更可讀。

當我在代碼上運行StyleCop時,它希望我將這些行保留很長時間。我不喜歡那樣,所以我想忽略StyleCop規則(SA1115)。我想不出有什麼理由可以說SC爲什麼需要這些長長的隊伍 - 這僅僅是「我們一直這樣做」的例子嗎?

回答

2

它可能在那裏提醒你,你的參數列表太長,應該縮短。

+0

< - 這個(問題根源=參數太多的方法) – annakata 2008-12-09 14:27:32

+0

OK:具體實例,然後。我正在做一個Console.WriteLine並以格式化的字符串打印大量不同的信息(約10項)。你如何使這個論證列表更短? (真的,我很想知道!) – 2008-12-09 14:41:24

0

看起來規則在技術上說「參數必須遵循逗號」。如果你問我,挑剔挑剔,但有些人相信用逗號開始連續線以真正顯示嘿!這條線是一個延續!例如

void Foo( int blah 
     , string blork 
     , ... 

不管你的船浮筒,親自:)

1

雖然打約與此question的代碼,我也可以通過從VS IDE中運行了StyleCop下降SA1115的犯規。一些擺弄後,這裏是覺得StyleCop的最終結果是OK:

public static string Format<T>(string pattern, T template) 
{ 
    Dictionary<string, string> cache = new Dictionary<string, string>(); 

    return RegexExpression.Replace(
     pattern, 
     match => 
    { 
     string key = match.Groups[1].Value; 
     string value; 

     if (!cache.TryGetValue(key, out value)) 
     { 
      var prop = typeof(T).GetProperty(key); 

      if (prop == null) 
      { 
       throw new ArgumentException("Not found: " + key, "pattern"); 
      } 

      value = Convert.ToString(prop.GetValue(template, null)); 
      cache.Add(key, value); 
     } 

     return value; 
    }); 
} 

只是想我會分享它。

5

StyleCop不希望你把所有的參數放在一條很長的線上。但是,它也不希望您隨意插入換行符將參數列表的一部分向下移動到下一行。了StyleCop想你做下列之一:

public void MyMethod(int param1, int param2, int param3) 

public void MyMethod(
    int param1, int param2, int param3) 

public void MyMethod(
    int param1, 
    int param2, 
    int param3) 
相關問題