c# - 搜索 List<Items> 然后更改为 List<ItemType : Item>

标签 c# search list

我有这段代码,我需要能够搜索 HierarchyItem 的不同列表s 并返回正确类型的列表
Hierarchy h = new Hierarchy();
//add a load of items of HierarchyItemA type;
List<HierarchyItemA> results = h.Search("text");

代码:

public class Hierarchy
{
    private List<HierarchyItem> items;

    public Hierarchy()
    {
        items = new List<T>();
    }
    public void AddItem(HierarchyItem item)
    {
        items.Add(item);
    }
    public List<T> Search(string searchText)
    {
        List<T> results = new List<T>();
        foreach (HierarchyItem item in items)
        {
            if (item.DisplayText().ToLower().Contains(searchText.ToLower()))
            {
                results.Add(item);
            }
        }
        return results;
    }
}
public abstract class HierarchyItem
{
    public string DisplayText()
    {
        //returns a string
    }
}
public class HierarchyItemA : HierarchyItem
{
    //do whatever
}
public class HierarchyItemB : HierarchyItem
{
    //do whatever
}

干杯

编辑: 有几个层次结构,每个层次结构中只有一种类型。 Hierarchy.Search(text) 应该返回一个包含正确类型的项目的列表(正确的类型是 A 或 B)

最佳答案

好的,我想我明白你现在想做什么了。感谢您的澄清。

首先,你需要声明类Hierarchy通过替换 public class Hierarchy 作为通用与 public class Hierarchy<T> .我们还将对其施加约束 T必须是 HierarchyItem .

public class Hierarchy<T> where T : HierarchyItem

我们将替换 private List<HierarchyItem> items

private List<T> items;

public void AddItem(HierarchyItem item)

public void AddItem(T item)

最后,行 foreach (HierarchyItem item in items)在方法搜索中应替换为

foreach(T item in items).

因此,我们最终得到

public class Hierarchy<T> where T: HierarchyItem {
    List<T> items;

    public Hierarchy() {
        items = new List<T>();
    }
    public void AddItem(T item) {
        items.Add(item);
    }
    public List<T> Search(string searchText) {
        List<T> results = new List<T>();
        foreach (T item in items) {
            if (item.DisplayText().ToLower().Contains(searchText.ToLower())) {
                results.Add(item);
            }
        }
        return results;
    }
}

这应该是您要寻找的。

关于c# - 搜索 List<Items> 然后更改为 List<ItemType : Item>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2049558/

相关文章:

mysql - Left Join 和几个 LIKE 使我的查询非常慢

python - 在python pandas的一列中转换多维列表

c# - IVMRWindowlessControl9 未呈现到父 WPF 窗口中

c# - 为什么在目标框架中需要 .net 4.6.1 是 4.5.2

c# - HashSet列表到单个HashSet的高效转换

C# 深度访问对象性能

ios - 在 UINavigationController 中的 TableViewController 中消失 UISearchController

linux - 在 linux 终端中使用 awk 命令忽略重复?

java - 在 Java 中添加多个对象到列表时遇到问题

Java 彩票游戏