不包装长参数列表的可能理由是什么? (StyleCop SA1115)

时间:2008-12-09 14:05:45

标签: resharper stylecop

我陷入了ReSharper和StyleCop之间的争斗中,我想让ReSharper获胜,但是在我这样做之前,我想听听支持StyleCop的论点。

当我写长参数列表时,ReSharper明智地切断参数列表并在下一行重新启动它。我发现它更具可读性。

当我在代码上运行StyleCop时,它希望我将这些行留下很长时间。我不喜欢这样,所以我想忽略StyleCop规则(SA1115)。我想不出SC为什么会首先想要这些长线的一个很好的理由 - 这只是“我们总是以这种方式做到”的情况吗?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

可能会提醒您,您的参数列表太长,应该缩短。

答案 2 :(得分:1)

在使用此question的代码时,我也通过从VS IDE运行StyleCop而违反了SA1115。经过一番讨论之后,StyleCop认为最终的结果还不错:

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;
    });
}

以为我会分享它。

答案 3 :(得分:0)

似乎规则在技术上说“参数必须遵循逗号”。如果你问我,那就太挑剔了,但是有些人相信用逗号开始延续线以便真正展示嘿!这一行是一个延续!例如

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

无论你的船是什么漂浮,亲自:)