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");
Убедитесь, что флажок "Использовать регулярные выражения" отмечен, а "Искать в:" должно быть "Цельное решение".