8

こんにちは私は1つのリストを別のリストに追加しようとしています。以前に使用AddRange()したことがありますが、ここでは機能していないようです...コードは次のとおりです。

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);                
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);

結果を確認するためにデバッグを行いました。これが得られたものresultCollectionです。4resultCollection2のカウントは6のカウントであり、範囲を追加した後でresultCollectionも、10のカウントが必要なときに4のカウントしかありません。

誰かが私が間違っていることを見ることができますか?どんな助けでも大歓迎です。

ありがとう、
マット

4

5 に答える 5

31

電話をかけるToList()ときは、コレクションをラップしていないので、同じアイテムをList<T>含む新しいコレクションを作成しています。List<T>したがって、ここで効果的に行っているのは、新しいリストを作成し、それにアイテムを追加してから、リストを破棄することです。

次のようなことをする必要があります:

List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);

または、C#3.0を使用している場合はConcat、たとえば、

resultCollection.Concat(resultCollection2); // and optionally .ToList()
于 2009-11-12T19:13:03.350 に答える
4

.ToList()が新しいコレクションを作成していると思います。したがって、アイテムはすぐに破棄される新しいコレクションに追加され、元のコレクションはそのまま残ります。

于 2009-11-12T19:11:19.157 に答える
1

resultCollection.ToList()新しいリストを返します。

試す:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);
于 2009-11-12T19:11:28.580 に答える
1

試す

IList newList = resultCollection.ToList()。AddRange(resultCollection2);

List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);
于 2009-11-12T19:11:34.447 に答える
0

次のいずれかを使用できます。

List<E> list = resultCollection as List<E>;
if (list == null)
    list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

または:

// Edit: this one could be done with LINQ, but there's no reason to limit
//       yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

または:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));
于 2009-11-12T19:16:56.913 に答える