2012-04-13 75 views
0

假设我有一个这样的类:创建一个包含其他列表元素引用的新列表?

class Base { } 
class A : Base { } 
class B : Base { } 
class C : Base { } 

和对象是这样的:

A a = new A(); 
List<B> bs = new List<B>(); 
List<C> cs = new List<C>(); 

是否有可能创建一个包含其他列表的引用(这样的变化反映在一个新的列表原项目 如:

void modifyContents(List<Base> allItems) { 
    //modify them somehow where allItems contains a, bs and cs 
} 

回答

3

您不能添加/删除/在其他列表替换项目,但修改伊特ms在其他列表中。

List<Base> baseList = new List<Base>(); 
baseList.Add(a); 
baseList.AddRange(bs); 
baseList.AddRange(cs); 
// now you can modify the items in baseList 
2
  1. 使用LINQ Concat()两个列表加入到单一IEnumerable<Base>
  2. 然后通过传递构造函数创建一个新的List<Base>例如先前加入一个

样品

class Base 
{ 
    public string Id { get; set; } 
} 

List<B> bs = new List<B>() { new B() }; 
List<C> cs = new List<C> { new C(), new C() }; 
var common = new List<Base>(bs.OfType<Base>().Concat(cs.OfType<Base>())); 

// bs[0] will be updated 
common[0].Id = "1"; 

// cs[0] will be updated 
common[1].Id = "2"; 

// cs[1] will be updated 
common[2].Id = "3"; 
相关问题