我有这段代码,我需要能够搜索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/