我有这段代码,我需要能够搜索HierarchyItem的不同列表并返回正确类型的列表
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/

10-10 23:56