6

当 Resharper 与自己争论时,人们怎么知道应该给予哪个角色更多的信任?

我想我发现了一些确实让 Resharper 感到困惑的代码(这显然是一个非常不寻常的案例 - 在使用了一天之后,我认为 Resharper 是蜜蜂的膝盖/自液化面包等以来最棒的东西)。

使用这行代码:

ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16));

Resharper 告诉我“添加参数名称'rgbkey'”然后“添加参数名称'rgbIV'”

所以这条线是:

ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(rgbKey: SecretKey.GetBytes(32), rgbIV: SecretKey.GetBytes(16));

但是,当我再次运行 Resharper 时,它会说,

“冗余参数名称规范” - “删除参数名称规范”(rgbkey)(然后是 rgbIV)。

似乎任何一种方式都可以正常工作,但......

4

2 回答 2

6

显式参数命名对于强制参数是可选的,因此两种形式都是“正确的”,问题是您更喜欢哪种形式?就像 vcsjones 所说,Resharper 只是为您提供一些重构选项以满足您的偏好。

于 2012-06-08T18:04:22.720 回答
6

Resharper 告诉我

实际上,它没有。R# 与用户交流的事情(大致上)有两类:它认为用户应该做的事情,以及用户可能想做的事情,它可以促进更快地完成。

第一个例子:

var i = 4;
i = 5;
DoSomething(i);

的分配4将产生“未使用分配”检查,左边距有一个灯泡图标,提供快速修复操作来修复它(通过删除分配)。

第二个例子:

if ((new Random()).Next() > 5)
{
    DoSomething();
}
else
{
    DoSomethingElse();
}

将光标定位在左边距if会产生一个铅笔图标,提供一个上下文操作来反转if. 这并不是说你应该——而是说,“嘿,如果你想这样做,只需选择这个菜单项,我会为你做的”。

添加参数名称属于第二类,即上下文操作。如果您不想提供它,您可以在 中将其关闭ReSharper | Options | Code Editing | C# | Context Actions。对于代码检查,弹出菜单本身提供了更改检查严重性的机会;或者您可以在 中查看所有这些ReSharper | Options | Code Isnpection | Inspection Severity

就个人而言,我认为我从未使用过一些上下文操作(例如“转换为十六进制”),但我发现其他一些操作对于快速编码非常有用(例如,在?:if和反转之间切换的各种组合)

于 2012-06-11T08:31:39.810 回答