c#现有对象的引用列表

时间:2014-02-21 08:52:06

标签: c# list

我有一个对象列表,它扩展了我的“基类”和另一个扩展相同“基类”的对象。结构是:

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]);

2 个答案:

答案 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) {}
}