Мне вообще не очень нравятся инструменты рефакторинга. Не нужно вдаваться в подробности. Тем не менее, я иногда пробую новые версии. Вот что я пытался сделать при оценке resharper 4.5:
Мне нужно было заменить все методы использования метода-оболочки (который будет создан), но я не смог. Я обычно отстой, замечая очевидную особенность, так ли это? Если у resharper нет этой функции, знаете ли вы такие инструменты?
Редактировать 2: пример был улучшен, чтобы включить вызовы метода экземпляра.
Редактировать:
Вот простой пример для игры.
static void Main(string[] args)
{
while(true)
{
if (Console.ReadKey().Key == ConsoleKey.Escape)
{
Thread.Sleep(10);
if (Quiting()) break;
}
Console.Beep(250, 50);
}
}
static bool Quiting()
{
if (Console.In.Peek() > 0)
{
Console.Beep(250, 150);
return false;
}
return true;
}
Мне нужно что-то вроде: (Edit2: добавлен пример экземпляра)
private static StringBuilder _builder = new StringBuilder();
static void Main(string[] args)
{
while(true)
{
var key = Console.ReadKey();
if (key.Key == ConsoleKey.Escape)
{
Thread.Sleep(10);
if (Quiting()) break;
}
_builder.Append(" (").Append(key.KeyChar).Append(") ");
Beep(250, 50);
}
}
static bool Quiting()
{
if (Console.In.Peek() > 0)
{
Beep(250, 150);
_builder.Append('@');
return false;
}
return true;
}
static void Beep(int frequency, int duration)
{
// finally cursor ends up here
Console.Beep(250, 50);
}
Console.Beep звонки рефакторинг. Далее позволяет рефакторинг StringBuilder.Append (char):
class Program
{
private static StringBuilder _builder = new StringBuilder();
static void Main(string[] args)
{
while(true)
{
var key = Console.ReadKey();
if (key.Key == ConsoleKey.Escape)
{
Thread.Sleep(10);
if (Quiting()) break;
}
_builder.Append(" (").AppendUpper(key.KeyChar).Append(") ");
Beep(250, 50);
}
}
static bool Quiting()
{
if (Console.In.Peek() > 0)
{
Beep(250, 150);
_builder.AppendUpper('n');
return false;
}
return true;
}
static void Beep(int frequency, int duration)
{
// finally cursor ends up here
Console.Beep(250, 50);
}
}
static class StringBuilderExtensions
{
public static StringBuilder AppendUpper(this StringBuilder builder, char c)
{
return builder.Append(char.ToUpper(c));
}
}
Выбор из использования и, возможно, пропуск общих параметров (таких как 250 выше) или общих параметров экземпляра для статики без расширения сделает эту функцию более ценной. Надеюсь, это проясняет вопрос.