8

是否可以在 Resharper 的模式目录中创建搜索模式来查找所有参数超过 3 个的构造函数?
如果是这样,怎么做?
我的问题是我不知道如何告诉 Resharper 只有构造函数定义应该匹配。

4

2 回答 2

3

据我所知,Resharper 中的模式只能一个方法中匹配。所以你无法匹配构造函数声明。

我只是尝试了以下模式:

new $type$($args$)

其中 type 是类型的占位符(谁会猜到?)和 args 至少 3 个参数。这确实找到了至少 3 个参数构造函数的所有用途,但它不会找到未使用的构造函数,最重要的是,它会找到这个:

public class MyClass : MyAbstractClass
{
    public MyClass(int foo1, int foo2) : base(foo1, foo2, 0)
    {
        // ...
    }
}

所以也许如果你认为你会遇到这些情况,而不是使用 Resharper 模式,你应该尝试使用 regex Find。这可能很难,因为想想 C# 语法相当复杂,但你可以得到一些东西......

编辑:我改编了一个视觉工作室正则表达式搜索构造函数声明,识别新行和至少参数(可以有可选值):

^(:b|\n)*((public|internal|private|protected|static|sealed)(:b|\n)+)+:i(:b|\n)*\((:b|\n)*:i(:b|\n)+:i(:b|\n)*(|\=(:b|\n)*:a*(:b|\n)*)(,(:b|\n)*:i(:b|\n)+:i(:b|\n)*(|\=(:b|\n)*:a*(:b|\n)*))^2(,(:b|\n)*:i(:b|\n)+:i(:b|\n)*(|\=(:b|\n)*:a*(:b|\n)*))*\)

这很丑,主要是因为 VS 自定义正则表达式没有任何标准\w{2,}? .

于 2011-08-17T12:22:25.103 回答
2

我知道这个问题专门针对 R#6.0,但我想为 R# 2016.3 提供答案,因为我最近也有同样的问题。

Resharper 2016(.3.1)


Search with Pattern 允许这种类型的搜索。这是您需要做的:

选择 Resharper > 查找 > 使用模式搜索

添加三个占位符:

  • args : 参数占位符 - 将最小值/最大值设置为要搜索的参数数量
  • 代码:语句占位符 - 不限制语句数量
  • 类型:标识符占位符 - 不输入正则表达式

确保将搜索模式设置为C#

将模式设置为以下内容:

public $type$($args$) 
{
$code$
}

根据需要设置Look In(例如解决方案)。然后点击查找。

您应该最终得到一个如下所示的搜索框:

搜索模式

这将找到包含您感兴趣的参数数量的所有(公共)构造函数。我能够在几个解决方案中成功使用它。作为额外的奖励,似乎很高兴找到具有多行参数列表的构造函数,而不仅仅是单行。

于 2017-01-26T12:37:21.487 回答