我们有一个完整性检查方法
void IsNotNull<T>(T obj){...}
调用
IsNotNull(obj);
我想替换它来调用另一个带有第二个类型字符串参数的重载(消息)
void IsNotNull<T>(T obj, string message){...}
所以我想将调用更改为
IsNotNull(obj, "obj is null");
我正在尝试使用resharper的find模式来实现这一点并替换。
所以我的查找模式是:IsNotNull($args$)
- 这很好用,它找到方法调用
替换模式:IsNotNull($args$, "$args$ is null")
- 这没有做任何事情
我也试过这个IsNotNull($args$, """" + $args$ + """")
- Edited-- 建议框显示正确的措辞(对于参数和标识符),但一旦应用它是不同的。我正在使用Resharper 6
在应用建议后,我得到了这个
单击“编辑图案”时
答案 0 :(得分:7)
您在搜索和替换中定义的$args$
参数是什么?如果您将其设为Identifier
,则替换应该起作用:
查找:
IsNotNull($args$)
- 其中$args$
是Identifier
替换:IsNotNull($args$, "$args$ is null")
你应该得到你想要的结果,即IsNotNull(obj, "obj is null")
。
答案 1 :(得分:1)
您可以考虑尝试使用此模式:
IsNotNull($args$, string.Format("{0} is null", $args$))
ReSharper 7.1对我来说非常适合。
看来,R#通常不想评估字符串文字中的参数表达式。鉴于你的模式
IsNotNull($args$, "$args$ is null")
它将IsNotNull(5);
替换为IsNotNull(5, 5);
,这是奇数
答案 2 :(得分:1)
最简单的方法是重写原始方法,如下所示:
void IsNotNull<T>(T obj){
IsNotNull(obj, "obj is null");
}
然后单击方法签名,并选择Refactor-&gt; Inline Method(Ctrl + R,Ctrl + I)。如果您需要保留原始方法签名,您可以,或者您可以选中“删除内联方法声明”框。
编辑:看起来hmemcpy的解决方案适用于7.1,所以我建议升级。但是,如果无法做到这一点,请在Visual Studio中尝试以下正则表达式find-and-replace。Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");
确保选中“使用正则表达式”,并且“查找:”应为“整个解决方案”。