C# Resharper查找模式并替换-如何插入字符串

C# Resharper查找模式并替换-如何插入字符串,c#,refactoring,resharper,automated-refactoring,C#,Refactoring,Resharper,Automated Refactoring,我们有一个健全的检查方法 void IsNotNull<T>(T obj){...} 我想替换它来调用另一个重载,该重载接受第二个字符串(message)类型的参数 我正在尝试使用resharper的find模式和replace来实现这一点 因此,我的查找模式是:IsNotNull($args$)——这很好,它可以查找方法调用 替换模式:IsNotNull($args$,“$args$为null”)-这不起任何作用 我还尝试了这个IsNotNull($args$,“+$args$+

我们有一个健全的检查方法

void IsNotNull<T>(T obj){...}
我想替换它来调用另一个重载,该重载接受第二个字符串(message)类型的参数

我正在尝试使用resharper的find模式和replace来实现这一点

因此,我的查找模式是:
IsNotNull($args$)
——这很好,它可以查找方法调用

替换模式:
IsNotNull($args$,“$args$为null”)
-这不起任何作用

我还尝试了这个
IsNotNull($args$,“+$args$+”)

--编辑-- 建议框显示正确的措辞(对于参数和标识符),但一旦应用它就不同了。我正在使用Resharper 6

在应用了这个建议之后,我得到了这个结论

当我点击编辑图案

你可以考虑尝试使用这个模式:

IsNotNull($args$, string.Format("{0} is null", $args$))
它在ReSharper 7.1中非常适合我

看起来,R#通常不想在字符串文本中计算参数表达式。根据你的模式

IsNotNull($args$, "$args$ is null")

它替换了
IsNotNull(5)
by
IsNotNull(5,5)
哪个是奇数

在搜索和替换中定义的
$args$
参数是什么?如果将其设置为
标识符
,则替换应该可以工作:

查找:
IsNotNull($args$)
-其中
$args$
是一个
标识符

替换:
IsNotNull($args$,“$args$为null”)


您应该得到您想要的结果,即
IsNotNull(obj,“obj为null”)
最简单的方法是重写原始方法,如下所示:

void IsNotNull<T>(T obj){
    IsNotNull(obj, "obj is null");
}

确保选中“使用正则表达式”,并且“查找:”应为“整个解决方案”。

在本例中,我需要的是args的名称,而不是args的值args.ToString()。我基本上需要用双引号括住我的参数,很抱歉误解了,因为我用来跟踪参数值,而不是参数的名称。我将尝试查看是否可以修改解决方案以满足您的需要谢谢,不幸的是它没有解决它仍然打印的问题IsNotNull(obj,obj)。我希望我的第二个参数用双引号括起来,“其中$args$是一个标识符”是重要的部分。感谢您的回复,但您的建议不能解决我在Resharper替换模式或一般情况下的问题。我想显示具体的信息。不仅仅是“obj为空”,在我的问题中,它只是一个example@NasmiSabeer:没问题。事实上,我刚刚找到答案,正在更新我的解决方案。@NasmiSabeer:事实上,看起来hmemcpy的解决方案是正确的。关键是$args$必须在“使用模式搜索”对话框中定义为标识符,而不是参数。我不知道为什么他们对参数占位符有引号限制,但标识符占位符似乎很好用。你能举一个例子说明它不起作用,以及你使用的是什么版本的Resharper吗?它似乎在我的系统上正常工作。谢谢。你能显示一下如果你点击“编辑模式”链接会出现什么吗?你用的是什么?我试过@hmemcpy提出的版本,效果很好<代码>R#7.1
IsNotNull($args$, string.Format("{0} is null", $args$))
IsNotNull($args$, "$args$ is null")
void IsNotNull<T>(T obj){
    IsNotNull(obj, "obj is null");
}
Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");