2008-12-09 57 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) 
相关问题