Как Вы используете функциональность сопоставления с образцом в ReSharper 5?

Новое сопоставление с образцом Resharper 5 кажется очень мощным, хотя для того, чтобы понять, как его использовать, нужно немного поработать.

Для тех, кто не знаком с этой функцией, это позволяет вам искать конкретные шаблоны в вашем коде. Экземпляры таких шаблонов могут при желании быть заменены альтернативой. В IntelliJ это называлось структурным поиском и заменой. Это гораздо эффективнее, чем простой поиск / замена RegEx.

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

Я предлагаю, чтобы каждый ответ включал:

  • краткое введение в обоснование шаблона
  • , пример того, что он будет соответствовать
  • , необязательный пример замены
  • XML, сгенерированного путем экспорта шаблона, чтобы другие тоже могли его опробовать
8
задан Drew Noakes 20 August 2010 в 14:59
поделиться

3 ответа

Сопоставление бита перечисления [Flags]

.NET 4 представляет метод System.Enum.HasFlag , который может привести в порядок ваш код.

До:

(myValue & MyFlagsEnum.Foo) == MyFlagsEnum.Foo

После:

myValue.HasFlag(MyFlagsEnum.Foo)

XML:

<CustomPatterns>
  <Pattern Severity="SUGGESTION">
    <Comment>Can condense using 'Enum.HasFlag' method</Comment>
    <ReplaceComment>Replace bit matching with 'Enum.HasFlag'</ReplaceComment>
    <ReplacePattern>$myValue$.HasFlag($target$)</ReplacePattern>
    <SearchPattern><![CDATA[($myValue$ & $target$) == $target$]]></SearchPattern>
    <Params />
    <Placeholders>
      <ExpressionPlaceholder Name="myValue" ExpressionType="System.Enum" ExactType="False" />
      <ExpressionPlaceholder Name="target" ExpressionType="System.Enum" ExactType="False" />
    </Placeholders>
  </Pattern>
</CustomPatterns>
10
ответ дан 5 December 2019 в 07:33
поделиться

JetBrains предлагает образец каталога шаблонов для структурного поиска и замены для загрузки, содержащий 17 шаблонов:

  • блок 'try / finally' может быть преобразован в оператор 'using'
  • Метод StringBuilder.Append можно преобразовать в StringBuilder.AppendFormat
  • Сравнение с истиной избыточно
  • Условное выражение избыточно
  • Код недоступен
  • Блок «если» никогда не выполняется
  • Идентичные ответвления в условном операторе
  • Избыточное составное присваивание с оператором | =
  • Избыточное составное присваивание с оператором & =
  • Избыточное составное присваивание с оператором | = (альтернативный случай)
  • Избыточное составное присваивание с оператором & = (альтернативный case)
  • Избыточная инициализация для ложного и условного блока
  • Избыточная инициализация для истинного и условного блока
  • Метод Array.CreateInstance может быть заменен выражением создания массива
  • Method Array.CreateInstance можно заменить выражением создания двумерного массива
  • Избыточное использование GetType () == typeof () с типом значения
  • Метод OfType может использоваться для фильтрации на основе типов
3
ответ дан 5 December 2019 в 07:33
поделиться

Перезапуск секундомера

.NET 4 вводит метод System.Diagnostics.Stopwatch.Restart(), который может привести в порядок ваш код.

До:

stopwatch.Reset();
stopwatch.Start();

После:

stopwatch.Restart();

XML:

<CustomPatterns>
  <Pattern Severity="SUGGESTION">
    <Comment>Use Restart method for System.Diagnostics.Stopwatch</Comment>
    <ReplaceComment>Use Restart method for System.Diagnostics.Stopwatch</ReplaceComment>
    <ReplacePattern>$stopwatch$.Restart();</ReplacePattern>
    <SearchPattern><![CDATA[$stopwatch$.Reset();
$stopwatch$.Start();]]></SearchPattern>
    <Params />
    <Placeholders>
      <ExpressionPlaceholder Name="stopwatch" ExpressionType="System.Diagnostics.Stopwatch" ExactType="True" />
    </Placeholders>
  </Pattern>
</CustomPatterns>
1
ответ дан 5 December 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: