创建一个新列表,其中包含对其他列表中元素的引用?

时间:2012-04-13 19:57:01

标签: c# list inheritance

假设我有这样的课程:

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
}

2 个答案:

答案 0 :(得分:3)

您无法在其他列表中添加/删除/替换项目,但可以修改其他列表中的项目。

List<Base> baseList = new List<Base>();
baseList.Add(a);
baseList.AddRange(bs);
baseList.AddRange(cs);
// now you can modify the items in baseList

答案 1 :(得分:2)

  1. 使用LINQ Concat()将两个列表合并为单个IEnumerable<Base>
  2. 然后通过传入先前加入一个
  3. 的构造函数来创建一个新的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";