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

问题描述 投票:2回答:4

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

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

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

resharper stylecop
4个回答
2
投票

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


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
投票

在玩这个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;
    });
}

只是想我会分享它。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.