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

B. *_*non 6 c# resharper cryptography optional-parameters named-parameters

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

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

使用这行代码:

ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16));
Run Code Online (Sandbox Code Playgroud)

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

那么那条线就是:

ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(rgbKey: SecretKey.GetBytes(32), rgbIV: SecretKey.GetBytes(16));
Run Code Online (Sandbox Code Playgroud)

然而,当我再次运行Resharper时,它说,

"冗余参数名称规范" - "删除参数名称规范"(rgbkey)(然后是rgbIV).

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

Dan*_*ore 6

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


Aak*_*shM 6

Resharper告诉我

实际上,它没有.(广义上)R#向用户传达了两类:它认为用户应该做的事情,以及用户可能想要做的事情,它可以促进更快地完成.

第一个例子:

var i = 4;
i = 5;
DoSomething(i);
Run Code Online (Sandbox Code Playgroud)

分配4将生成"未使用分配"检查,左边缘有一个灯泡图标,提供快速修复操作来修复它(通过删除分配).

第二个例子:

if ((new Random()).Next() > 5)
{
    DoSomething();
}
else
{
    DoSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

将光标定位在左边缘if会产生一个铅笔图标,提供一个上下文动作来反转if.它不是说你应该 - 它说,"嘿,如果你想这样做,只需选择这个菜单项,我就会为你做".

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

个人有一些我不认为我曾经使用过(如"转换为十六进制")背景下的行为,但也有其他人,我觉得非常宝贵的快速编码(之间的切换各种组合?:和if和反相,例如)