我是一名新程序员,学习 C# 作为爱好。我正在编写一个图书馆导航器,用户可以在其中按名称、流派、作者等搜索书籍。我正在接近这个项目的结尾,到目前为止,我已经解决了所有问题并自己解决了它们。但我现在被困住了,因此在 StackOverflow 上写作以寻求专家的帮助。我会尽可能清楚地解释我的问题。
我的节目目前有 4 种书籍类型:恐怖、小说、奇幻和神秘。
因为将来我可能会添加更多类型,所以我不想发现自己浏览数百行代码来编辑 if/case 语句并添加新类型。
有没有一种实用的方法可以将我将来可能编辑的所有信息集中到一个地方?
以下是我宣布的清单:
public static List<string> bookList = new List<string> {"shindler's list", "it", "maltese falcon", "bfg", "hobbit"};
public static List<string> fiction = new List<string> {"shindler's list"};
public static List<string> fantasy = new List<string> {"bfg", "hobbit"};
public static List<string> horror = new List<string> {"it"};
public static List<string> mystery = new List<string> {"maltese falcon"};
现在,这些列表是从代码的各个部分调用的,例如:
case "1":
Seperation();
Console.Clear();
Console.Write("Enter book name: ");
var bookTitleUserInput = Console.ReadLine();
Console.WriteLine("You searched for: " + bookTitleUserInput);
foreach (string s in bookList)
{
if (s.ToLowerInvariant() == bookTitleUserInput.ToLowerInvariant())
{
Console.WriteLine("\n");
Seperation();
OutputBookSummary(bookTitleUserInput.ToLowerInvariant());
Seperation();
if (fiction.Contains(bookTitleUserInput.ToLowerInvariant()))
{
Console.WriteLine("Genre: Fiction");
Console.WriteLine("\n");
}
else if (horror.Contains(bookTitleUserInput.ToLowerInvariant()))
{
Console.WriteLine("Genre: Horror");
Console.WriteLine("\n");
}
else if (mystery.Contains(bookTitleUserInput.ToLowerInvariant()))
{
Console.WriteLine("Genre: Mystery");
Console.WriteLine("\n");
}
else if (fantasy.Contains(bookTitleUserInput.ToLowerInvariant()))
{
Console.WriteLine("Genre: Fantasy");
Console.WriteLine("\n");
}
else
{
Console.WriteLine("");
}
break;
}
}
和像这样的代码:
case "4":
Console.Clear();
Console.WriteLine("Settings Menu");
Seperation();
Console.WriteLine("1) Search By Genre");
Console.WriteLine("2) Search By Author");
Console.WriteLine("3) Search By Book Name");
Console.WriteLine("4) Back to Main Menu");
Seperation();
Console.Write("Choice: ");
var settingsMenuSelection = Console.ReadLine();
switch (settingsMenuSelection)
{
case "1":
Console.WriteLine("1) Horror");
Console.WriteLine("2) Mystery");
Console.WriteLine("3) Fiction");
Console.WriteLine("4) Fantasy");
var genreMenuSelection = Console.ReadLine();
break;
所以像这样,如果我必须编辑代码以添加更多类型,我将不得不滚动浏览我的代码并单独编辑它们。更不用说这会造成的混乱和混乱..
我曾尝试将 if 语句块case 1:
放在单独的方法中,但它不起作用。我还尝试将所有内容放在另一个类中case 1:
并case 4:
从那里调用块,但这也没有用。
通过不工作,我Genre:
的意思是 + 流派没有在控制台上输出。
那么,简而言之,有没有办法集中所有上述代码,所以如果出现新书/流派/作者,我就不必导航了?因为我认为那将是不好的做法。
在此先感谢,很抱歉发了这么长的帖子!