C# 通过ObservableCollection进行迭代,以查找对象并通过用户输入返回可能结果的列表
我正在创建一个图书馆应用程序,也就是说,它有书架和书籍的集合。我现在正在写这些书,我需要一种方法,可以根据用户输入遍历列表,并通过输入查找可能对象的列表。例如,如果用户指定搜索是按类型进行的,并且他输入了Fantasy,那么必须显示所有类型为“Fantasy”的对象。 到目前为止,我已经得到了以下结果:(一个返回一个已找到的book对象的方法,但我需要一个包含所有这些内容的书籍列表)C# 通过ObservableCollection进行迭代,以查找对象并通过用户输入返回可能结果的列表,c#,loops,observablecollection,C#,Loops,Observablecollection,我正在创建一个图书馆应用程序,也就是说,它有书架和书籍的集合。我现在正在写这些书,我需要一种方法,可以根据用户输入遍历列表,并通过输入查找可能对象的列表。例如,如果用户指定搜索是按类型进行的,并且他输入了Fantasy,那么必须显示所有类型为“Fantasy”的对象。 到目前为止,我已经得到了以下结果:(一个返回一个已找到的book对象的方法,但我需要一个包含所有这些内容的书籍列表) 如果您还没有,请添加以下using语句: using System.Linq; switch (selecte
如果您还没有,请添加以下using语句:
using System.Linq;
switch (selectedSearch)
{
case "Title":
return BookContainer.FirstOrDefault(x => x.Title == input).ToList();
// ...
}
更新您的案例陈述,如下所示:
case "Title":
return BookContainer.Where(x => x.Title == input).ToList();
编辑:
您还需要更新返回的方法
List<Book>
列表
我应该补充一点,这假设BookContainer是一个列表或其他实现IEnumerable或IQueryable的构造(应该是因为您在foreach中使用它)。这可能适用,也可能不适用,但要生成最通用的搜索函数,您可以将搜索谓词传递给函数,然后将其传递给。例如:
public Book SearchSpecificBook(Func<Book, bool> predicate)
{
return BookContainer.FirstOrDefault(predicate);
}
如果这是不可能的(例如,您希望根据外部条件按不同的参数进行搜索),您仍然可以通过在switch语句中使用以下命令来提高代码的可读性:
using System.Linq;
switch (selectedSearch)
{
case "Title":
return BookContainer.FirstOrDefault(x => x.Title == input).ToList();
// ...
}
另一件事我想考虑一下可能的搜索参数。这将添加到您的搜索中:
public enum BookSearchType
{
Title,
Author,
Genre,
ISBN
}
然后,您可以切换可能的BookSearchType
值,如下所示:
Book book = bookcase.SearchSpecificBook(x => x.Title == "50 Flavors of Regex");
public Book SearchSpecificBook(BookSearchType selectedSearch, string input)
{
switch (selectedSearch)
{
case BookSearchType.Title:
return BookContainer.FirstOrDefault(x => x.Title == input).ToList();
case BookSearchType.Author:
return BookContainer.FirstOrDefault(x => x.Author == input).ToList();
// ...
default:
throw new ArgumentOutOfRangeException(nameof(selectedSearch));
}
}
可以我在添加注释时遇到了一些麻烦,因为它会弄乱代码。但基本上,我尝试了你的解决方案,但现在我在控制台中打印时遇到了问题,因为即使我尝试将它引用到我拥有的ObservableCollection,它也不会检测到里面的对象。没关系。我修好了。非常感谢你的帮助!谢谢你的帮助:)