Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ObservableCollection进行迭代,以查找对象并通过用户输入返回可能结果的列表_C#_Loops_Observablecollection - Fatal编程技术网

C# 通过ObservableCollection进行迭代,以查找对象并通过用户输入返回可能结果的列表

C# 通过ObservableCollection进行迭代,以查找对象并通过用户输入返回可能结果的列表,c#,loops,observablecollection,C#,Loops,Observablecollection,我正在创建一个图书馆应用程序,也就是说,它有书架和书籍的集合。我现在正在写这些书,我需要一种方法,可以根据用户输入遍历列表,并通过输入查找可能对象的列表。例如,如果用户指定搜索是按类型进行的,并且他输入了Fantasy,那么必须显示所有类型为“Fantasy”的对象。 到目前为止,我已经得到了以下结果:(一个返回一个已找到的book对象的方法,但我需要一个包含所有这些内容的书籍列表) 如果您还没有,请添加以下using语句: using System.Linq; switch (selecte

我正在创建一个图书馆应用程序,也就是说,它有书架和书籍的集合。我现在正在写这些书,我需要一种方法,可以根据用户输入遍历列表,并通过输入查找可能对象的列表。例如,如果用户指定搜索是按类型进行的,并且他输入了Fantasy,那么必须显示所有类型为“Fantasy”的对象。 到目前为止,我已经得到了以下结果:(一个返回一个已找到的book对象的方法,但我需要一个包含所有这些内容的书籍列表)


如果您还没有,请添加以下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,它也不会检测到里面的对象。没关系。我修好了。非常感谢你的帮助!谢谢你的帮助:)