Объединить два метода в C #

1

Так что у меня есть два метода, я думал, есть ли способ уменьшить код до одного метода и оптимизировать код

Оба метода почти одинаковы, кроме оператора if

private void RepeatSearch()
{
  string optionRead = string.Empty;
  do
  {
   Console.WriteLine("\nPress \"Y\" to Continue ,\"M\" For Main Menu\n");
   Console.Write("Your Choice : ");
  optionRead = Console.ReadLine().ToLower();
   if (optionRead == "y")
    {
     SearchData();
    }
    if (optionRead == "m")
     {
       m.SelectOption();
     }
   else
     {
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine("\nInvalid Option.Enter M or Y\n");
      Console.ResetColor();
     }
  } while (optionRead != "m" || optionRead != "y");
}

private void RepeatAdd()
{
  string optionRead = string.Empty;
  do
  {
   Console.WriteLine("\nPress \"Y\" to Continue ,\"M\" For Main Menu\n");
   Console.Write("Your Choice : ");
  optionRead = Console.ReadLine().ToLower();
   if (optionRead == "y")
    {
      AddData();
    }
    if (optionRead == "m")
     {
       m.SelectOption();
     }
   else
     {
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine("\nInvalid Option.Enter M or Y\n");
      Console.ResetColor();
     }
  } while (optionRead != "m" || optionRead != "y");
}
  • 0
    Почему отрицает ??
  • 0
    Это может ответить на ваш вопрос (хотя я не проголосовал).
Теги:
methods

3 ответа

8
Лучший ответ

Поэтому передайте разницу в качестве делегата

private void DoASearch(Action a)
{
    string optionRead = string.Empty;
    do
    {
        Console.WriteLine("\nPress \"Y\" to Continue ,\"M\" For Main Menu\n");
        Console.Write("Your Choice : ");
        optionRead = Console.ReadLine().ToLower();
        if (optionRead == "y")
        {
            if(a != null)
            {
                a();
            }
        }
        if (optionRead == "m")
        {
            m.SelectOption();
        }
        else
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("\nInvalid Option.Enter M or Y\n");
            Console.ResetColor();
        }
    } while (optionRead != "m" || optionRead != "y");
}

тогда

DoASearch(SearchData);
  • 0
    Большое спасибо. Работает отлично :)
0

То, что вы должны сделать, это параметризовать методы, сделав параметр разницы между двумя равными функциями.

Например

private void Repeat(bool add) // True when adding, false when searching
{
    ...
    if (add)
    { 
        AddData();
    }
    else
    {
        SearchData();
    } 
}

Используйте оператор if в зависимости от добавления bool.

Btw, было бы лучше использовать enum вместо логического.

Кроме того, в вашем случае (по мере того, как репозиторий записывает), достаточно делегата. Использование таких параметров, как в моем решении, является более общим решением.

0

Вы можете передать логическую переменную методу, чтобы указать, будет ли это делать SearchData(); или AddData() ;.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню