Resharper найти шаблон и заменить - как вставить строки

У нас есть метод проверки работоспособности

void IsNotNull<T>(T obj){...}

Вызов

IsNotNull(obj); 

Я хочу заменить это, чтобы вызвать другую перегрузку, которая принимает второй параметр строки типа (сообщение)

void IsNotNull<T>(T obj, string message){...}

Итак, я хочу изменить вызов как

IsNotNull(obj, "obj is null");

Я пытаюсь достичь этого, используя шаблон поиска resharper и заменяю.

Итак, мой шаблон поиска: IsNotNull($args$) - это работает отлично, и он находит, что метод вызывает

Заменить шаблон: IsNotNull($args$, "$args$ is null") - Это ничего не делает

Я также пробовал это IsNotNull($args$, """" + $args$ + """")

- Edited-- В поле подсказки отображается правильная формулировка (как для аргумента, так и для идентификатора), но после ее применения она отличается. Я использую Resharper 6

enter image description here

После применения предложения я получаю это enter image description here

Когда я нажимаю Edit Pattern enter image description here

Ответ 1

Каков ваш параметр $args$, определенный как в поиске и замене? Если вы сделаете его Identifier, то вы должны заменить:

Найти: IsNotNull($args$) - где $args$ - Identifier
Заменить: IsNotNull($args$, "$args$ is null")

У вас должен быть нужный результат, т.е. IsNotNull(obj, "obj is null").

Ответ 2

Вы можете попробовать использовать этот шаблон:

IsNotNull($args$, string.Format("{0} is null", $args$))

Он отлично работает для меня с ReSharper 7.1.

Кажется, что R # не хочет нормально оценивать выражение аргументов внутри строковых литералов. Учитывая ваш шаблон

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

Он заменил IsNotNull(5); на IsNotNull(5, 5);, который нечетный

Ответ 3

Самый простой способ - переписать исходный метод следующим образом:

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

Затем нажмите на подпись метода и выберите Refactor- > Inline Method (Ctrl + R, Ctrl + I). Если вам нужно сохранить оригинальную подпись метода, вы можете установить флажок "Удалить объявленное объявление метода".

EDIT: похоже, решение hmemcpy работает в версии 7.1, поэтому я предлагаю обновление. Однако, если это невозможно, попробуйте следующее регулярное выражение find-and-replace в Visual Studio.

Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");

Убедитесь, что флажок "Использовать регулярные выражения" отмечен, а "Искать в:" должно быть "Цельное решение".