簡體   English   中英

在C#中結合兩種方法

[英]Combine two Method in C#

所以我有以下兩種方法,我在想有什么方法可以將代碼簡化為一種方法並優化代碼

除了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");
}

因此,將差異作為代表

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);

您應該做的是通過使兩個相等函數之間的所有差的參數成為參數來對方法進行參數化。

例如

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

根據布爾添加使用if語句。

順便說一句,最好使用枚舉而不是布爾值。

另外,在您的情況下(如支出者的解決方案所述),委托就足夠了。 在我的解決方案中使用類似的參數是更通用的解決方案。

您可以將布爾變量傳遞給該方法,以表示是否應使用SearchData();。 或AddData();。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM