[英]How to create a custom pattern to replace `as` cast with direct cast in Resharper?
[英]Resharper find pattern and replace - how to insert strings
我們有一個完整性檢查方法
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
應用建議后,我得到了這個
當我單擊編輯模式
您在搜索和替換中定義的$args$
參數是什么? 如果你使它成為Identifier
,那么你替換應該工作:
查找:
IsNotNull($args$)
- 其中$args$
是一個Identifier
替換:IsNotNull($args$, "$args$ is null")
你應該得到你想要的結果,即IsNotNull(obj, "obj is null")
。
您可以考慮嘗試使用此模式:
IsNotNull($args$, string.Format("{0} is null", $args$))
使用ReSharper 7.1,它對我來說非常適合。
看來,R#通常不想評估字符串文字中的參數表達式。 鑒於你的模式
IsNotNull($args$, "$args$ is null")
它取代了IsNotNull(5);
作者: IsNotNull(5, 5);
這很奇怪
最簡單的方法是重寫原始方法,如下所示:
void IsNotNull<T>(T obj){
IsNotNull(obj, "obj is null");
}
然后單擊方法簽名,並選擇Refactor-> Inline Method(Ctrl + R,Ctrl + I)。 如果您需要保留原始方法簽名,您可以,或者您可以選中“刪除內聯方法聲明”框。
編輯:看起來hmemcpy的解決方案適用於7.1,所以我建議升級。 但是,如果不可能,請在Visual Studio中嘗試以下正則表達式find-and-replace。
Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");
確保選中“使用正則表達式”,並且“查找:”應為“整個解決方案”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.