Шаблон Resharper Refactor для TryGetValue в словаре - PullRequest
0 голосов
/ 20 сентября 2018

Самым громоздким фрагментом синтаксиса, который мне нужно постоянно писать, является ленивая инициализация контейнера в словаре, например:

ContainerRecord value;
if(!_dictionary.TryGetValue(key,out value))
{
   value = new ContainerRecord();
   _dictionary[key] = value;
}
//Container is always initialized here

Я считаю, что это будет тривиальный шаблон рефакторинга из: (По крайней мере, для явногообъявление переменной и части if)

var value = _dictionary[key];

Я знаю, что в новых версиях C # есть новый синтаксический сахар, который устраняет необходимость предварительного объявления переменных.К сожалению, у меня нет доступа к этим функциям в моей среде, и я не буду в обозримом будущем.

По-видимому, существует рефактор «проверка на наличие ключа», который достигает почти того же результата соборотная сторона выполнения поиска дважды.

Возможно ли это через какое-то расширение?Я подумал, что это достаточно распространенный случай, когда его уже где-то разрешили.

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете создать собственный шаблон для этого.

  1. Открыть ReSharper |Параметры ... .
  2. Перейти к Проверка кода |Пользовательские шаблоны узел.
  3. Нажмите Добавить шаблон * кнопку 1013 *.
  4. Выберите Замените в правом верхнем углу диалогового окна.
  5. Добавьте следующие четыре заполнителя с помощью кнопки Добавить заполнитель :

    Type: Identifier Placeholder
    Name: value
    
    Type: Expression Placeholder
    Name: key
    
    Type: Type Placeholder
    Name: type
    
    Type: Expression Placeholder
    Name: dict
    Expression Type: System.Collections.Generic.IDictionary<,>
    
  6. Введите следующее в качестве шаблона поиска в текстовой области навверху:

    $type$ $value$ = $dict$[$key$];
    
  7. Введите следующее в качестве шаблона замены в текстовой области внизу:

    $type$ $value$;
    if(!$dict$.TryGetValue($key$, out $value$))
    {
        $value$ = new $type$();
        $dict$[$key$] = $value$;
    }
    
  8. Необязательно : заполните Описание сверху.Я использовал Replace with TryGetValue.

  9. Дополнительно : заполните Description внизу.Я использовал то же самое.
  10. Необязательно : установите флажок Формат после замены .

Готовый диалог должен выглядеть следующим образом:

Search Pattern dialog

Нажмите на кнопку Save. Вернувшись в Custom Patterns, вы можете установить уровень серьезности для вашего нового образца на правой стороне, используя выпадающий список.Я выбрал Предложение . Выйдите из параметров, нажав кнопку Сохранить .

Если вы все настроили правильно, ReSharper должен отметитьсоответствующие шаблоны с предлагаемым исправлением:

Suggestion on hovering

Suggestion in quick fix menu

...