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
}
4

2 に答える 2

3

他のリストのアイテムを追加/削除/置換することはできませんが、他のリストのアイテムを変更することはできません。

List<Base> baseList = new List<Base>();
baseList.Add(a);
baseList.AddRange(bs);
baseList.AddRange(cs);
// now you can modify the items in baseList
于 2012-04-13T20:00:12.947 に答える
2
  1. LINQ Concat()を使用して、両方のリストを1つのリストに結合します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";
于 2012-04-13T20:04:47.873 に答える