我有这段代码,我需要能够搜索 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;
}
}
这应该是您要寻找的。p>
关于c# - 搜索 List<Items> 然后更改为 List<ItemType : Item>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2049558/