我陷入了 ReSharper 和 StyleCop 之间的争斗,我想让 ReSharper 获胜,但在我这样做之前我想听听支持 StyleCop 的论点。
当我编写长参数列表时,ReSharper 会明智地切割参数列表并在下一行重新启动它。我发现这更具可读性。
当我在代码上运行 StyleCop 时,它希望我将这些行留得很长。我不喜欢这样,所以我想忽略 StyleCop 规则 (SA1115)。我想不出 SC 一开始就想要那些排长队的充分理由——这只是“我们一直都是这样做的”的一个例子吗?
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)
它可能会提醒您,您的参数列表太长,应该缩短。
在玩这个问题的代码时,我还通过从 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;
});
}
只是想我会分享它。
从技术上讲,该规则似乎是“参数必须遵循逗号”。如果你问我,这很挑剔,但有些人相信用逗号开始连续行才能真正显示嘿!这条线是延续!例如
void Foo( int blah
, string blork
, ...
无论你的船飘起来,个人:)