簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM