Так что у меня есть два метода, я думал, есть ли способ уменьшить код до одного метода и оптимизировать код
Оба метода почти одинаковы, кроме оператора 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 в зависимости от добавления bool.
Btw, было бы лучше использовать enum вместо логического.
Кроме того, в вашем случае (по мере того, как репозиторий записывает), достаточно делегата. Использование таких параметров, как в моем решении, является более общим решением.
Вы можете передать логическую переменную методу, чтобы указать, будет ли это делать SearchData(); или AddData() ;.