16

.NET(VB)で、1つのコレクション内のすべてのアイテムを取得し、それらを2番目のコレクションに追加するにはどうすればよいですか(2番目のコレクションの既存のアイテムを失うことなく)?私はこれより少し効率的なものを探しています:

For Each item As Host In hostCollection1
    hostCollection2.Add(item)
Next

私のコレクションはジェネリックコレクションであり、基本クラスから継承されています--Collection(Of)

4

10 に答える 10

41

AddRangeを使用できます:hostCollection2.AddRange(hostCollection1)

于 2008-09-29T03:41:00.173 に答える
5

VBを要求していることは知っていますが、C#では、コレクションのコンストラクターを使用して、コレクションを任意のIEnumerableで初期化できます。例えば:

List<string> list1 = new List<string>();
list1.Add("Hello");
List<string> list2 = new List<string>(list1);

おそらく同じ種類のものがVBに存在します。

于 2008-09-29T03:33:49.847 に答える
3

List2をList1に初期化すると、コピーではなく参照を取得することを忘れないでください。ディープクローンを作成しない限り、1セットの文字列が残ります。

于 2008-09-29T03:39:22.907 に答える
2

これは、 を使用する場合に使用できますIList。ただし、AddRangeメソッドは では使用できませんCollectionCollectionにキャストしようと思っListたのですが、無理です。

于 2009-08-24T07:24:03.897 に答える
2

機能をいつも使っていList<T>.AddRange(otherList<T>)ます。繰り返しますが、これがオブジェクトのリストである場合、それらは同じものを参照します。

コレクションの種類を指定していませんが、AddRange は CollectionBase 継承オブジェクトには存在しません

于 2008-09-29T03:43:32.007 に答える
1

ベンのソリューションはVB.Netに存在します:

Dim collection As IEnumerable(Of T)    
Dim instance As New List(collection)

リンクされたドキュメントは次のとおりです。

ただし、気になるのは、浅いコピーか深いコピーかということです。

于 2008-09-29T03:37:42.070 に答える
1

両方のコレクションで同じオブジェクト セットを変更する場合を除き、各オブジェクトをヒープにコピーする必要があります。これがパフォーマンスにどのように影響しているかというシナリオを説明していただければ、適切な解決策を見つけることができるかもしれません。

于 2008-09-29T03:46:12.440 に答える
0

Array.Copyあなたの問題を解決するかもしれません。

于 2008-09-29T03:34:53.823 に答える
0

List.CopyTo(T []); 多分?

http://msdn.microsoft.com/en-us/library/t69dktcd.aspx

于 2008-09-29T03:35:30.577 に答える