2015-01-19 2 views
1

Так я есть следующие два метода, я имел в виду, есть ли способ я могу уменьшить код одного метода и оптимизируют кодОбъединить два метода в C#

Оба метода являются почти то же самое, за исключением если заявление

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

Почему downvotes ?? – Richa

+0

[Это] (http://meta.stackoverflow.com/a/252740/3242721) может ответить на ваш вопрос (хотя я не остановил его). –

ответ

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

Большое спасибо. Прекрасно работает :) – Richa

0

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

E.g.

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

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

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

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

0

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

Смежные вопросы