13

我们采用了一个约定,即在调用带有“非显而易见”参数的 C# 函数时,即使没有必要,我们也会使用命名参数。

例如

obj.Process(save: true)

而不是

obj.Process(true)

虽然没有必要,但在浏览代码以查看发生了什么时,它会变得容易得多,尤其是对于布尔值或幻数。

但是,resharper 的代码清理有删除这些的习惯。我还没有找到一种方法来告诉它保留命名参数 - 有吗?

4

5 回答 5

15

尽管您可以通过@EricWalker 所说的来实现它,但我想提出另一种选择。

您可以启动 ReSharper 选项,查找检查严重性,然后转到冗余显式参数名称规范并将其更改为不显示。这样您就不会丢失所有其他删除冗余代码提供的良好清理(如删除全名限定符)。

于 2015-07-08T18:11:11.833 回答
2

在 ReSharper 2018.1 中

有两个相关步骤。您可能希望同时执行这两项操作,但这取决于您希望如何配置 ReSharper。

首先,在 中Resharper -> Options -> Code Inspection -> Inspection Severity禁用“对文字值使用首选参数样式”代码样式。(对于布尔值,“[..] for literal values”是相关设置,尽管我选择禁用所有这些设置。)

检查严重性

此设置也与ReSharper -> Options -> Code Editing -> Code Style -> Arguments设置相关联,因此这些设置现在应自动更改为“不显示”而不是“提示”:

代码风格提示

其次,由于“应用参数样式(命名与位置)”,无法使用默认的 ReSharper 代码清理配置文件- 必须在您的代码清理配置文件中禁用此选项。

代码清理设置

于 2018-08-28T22:42:12.127 回答
1

您要查找的设置位于 Code Cleanup\C#\Remove code redundancies 下

我知道这可能不是您希望的答案,但是您可以通过取消选中该设置来阻止它删除您的参数名称(以及留下所有其他冗余。)

您可能可以在代码清理中设置不同的配置文件来解决该问题,但您最好向 JetBrains 的人寻求解决方案。

HTH,
埃里克

于 2015-07-08T17:36:09.803 回答
1

要在方法调用中显示参数名称,请转到:

ResharperOptionsCode EditingC#Syntax StyleArguments

然后将所有下拉值设置为“命名参数”。

此外,选中“跳过单个参数”以仅在有多个参数时显示该方法的命名参数。

在此处输入图像描述


上述方法已在Resharper版本上得到验证2020.2.4

于 2020-11-09T18:30:34.497 回答
1

更新:

从 v2017.1.3 (2017-08-28) 开始,此解决方案似乎不再适用


我目前正在使用 ReSharper v2017.1 (2017-06-01),JetBrains 似乎还没有解决这个问题。

正如@Colin Harkness注意到的那样,目前保留“命名参数”的最后手段是将选项“命名表达式(变量、属性、方法等)”设置为“命名参数”。

这当然不是最好的出路。

在此处输入图像描述

更新:

我在 JetBrains 的论坛上发现了一个小技巧。您可以通过在文件顶部添加这行代码来取消将命名参数视为冗余。

// ReSharper disable ArgumentsStyleNamedExpression

您必须在 ReSharper 设置中进行一些次要配置。为了保持自动添加// ReSharper 禁用 ArgumentsStyleNamedExpression简单,我已将此指令添加到文件标题文本中,如图所示。2.

在此处输入图像描述 图 2 - 添加 ArgumentsStyleNamedExpression 规则

之后,您必须检查代码清理配置中的更新文件头选项,如图所示。3

在此处输入图像描述 图 3 - 检查“更新文件头”选项

在这种情况下,当代码清理开始时,它首先添加ArgumentsStyleNamedExpression规则,并将代码样式应用于文件。

添加此规则后,您可以进入工具 | 选项 | 环境 | 字体和颜色 | ReSharper Parameter Identifier并更改此案例的突出显示颜色,以便在视觉上区分参数参数名称,如图 4 所示。

在此处输入图像描述

图 4 - 参数名称突出显示


不幸的是,这种保留参数名称的方式并不总是有效(ReSharper 可以选择性地保留/删除参数名称)。

于 2017-06-01T10:14:37.027 回答