是否应该添加或删除这些参数?

时间:2012-06-08 17:36:15

标签: c# cryptography resharper optional-parameters named-parameters

当Resharper与自己辩论时,如何知道哪个角色更可信?

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

使用以下代码:

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)。

似乎两种方式都可行,但是......

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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中将其关闭。对于Code Inspections,弹出菜单本身提供了更改检查严重性的机会;或者你可以在ReSharper | Options | Code Isnpection | Inspection Severity中查看所有这些内容。

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