在 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();
}
}
根据 bool add 使用 if 语句。
顺便说一句,最好使用枚举而不是布尔值。
此外,在您的情况下(如 spender 的解决方案所写),委托就足够了。
在我的解决方案中使用参数是一种更通用的解决方案。
您可以将布尔变量传递给该方法以指示它是否应该执行 Search Data();或添加数据();.
所以我有以下两种方法,我在想有什么方法可以将代码减少到一种方法并优化代码
两种方法几乎相同,除了 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();
}
}
根据 bool add 使用 if 语句。
顺便说一句,最好使用枚举而不是布尔值。
此外,在您的情况下(如 spender 的解决方案所写),委托就足够了。 在我的解决方案中使用参数是一种更通用的解决方案。
您可以将布尔变量传递给该方法以指示它是否应该执行 Search Data();或添加数据();.