我有一个对象列表,它扩展了我的“基类”和另一个扩展相同“基类”的对象。结构是:
private List<Extended1> list;
private Extended2 item;
我会创建一个列表,我可以将所有元素作为基类获取。 类似的东西:
private List<ref BaseClass> items;
我怎么能这样做?
解决 我认为列表的添加方法是按值而不是通过引用。 我创建了一个基类列表并添加了实际项目。
private List<baseClass> items;
items.add(item);
for(xxxxxx)items.add(list[i]);
答案 0 :(得分:7)
您只需创建基类列表
即可var list = new List<BaseClass>();
list.Add(new Extended1());
list.Add(new Extended2());
您可以将派生类的实例添加到此列表中。
您还可以使用TypeOf扩展方法检索某个子类的实例:
var extended1 = list.TypeOf<Extended1>();
答案 1 :(得分:1)
快速举例:
void Main()
{
List<Extended1> lst = new List<Extended1>() {new Extended1(0),
new Extended1(1),
new Extended1(2),
new Extended1(3)};
Extended2 itm = new Extended2(4);
List<BaseCls> items = new List<BaseCls>();
items.AddRange(lst.Cast<BaseCls>());
items.Add(itm);
Console.WriteLine(String.Join(", ",
items.Select(i => i.myInt.ToString()).ToArray()));
// prints 0, 1, 2, 3, 40
}
public class BaseCls {
public int myInt;
public BaseCls(int val) {
myInt = val;
}
}
public class Extended1:BaseCls {
public Extended1(int val):base(val) {}
}
public class Extended2:BaseCls {
public Extended2(int val):base(val*10) {}
}