107

一般的なリストのAddRange関数とConcat関数の違いは何ですか? どちらが推奨されますか?

4

3 に答える 3

135

それらはまったく異なるセマンティクスを持っています。

AddRange は、リストに他の項目を追加してリストを変更します。

Concat は、リストを変更せずに、リストとその他の項目を含む新しいシーケンスを返します。

必要なセマンティクスを持つものを選択してください。

于 2008-09-19T07:17:46.153 に答える
41

大きな違いは、AddRange呼び出されたリストを変更するのに対しConcat、新しいリストを作成することです。したがって、それらにはさまざまな用途があります。

また、any に適用され、新しい List を生成するために必要なを返すConcat拡張メソッドです。IEnumerable<T>IEnumerable<T>.ToList()

既存のリストの内容を拡張したい場合は、 を使用しますAddRange

IEnumerable<T>2 つのソースから新しいリストを作成する場合は、 with を使用Concat.ToListます。これには、どちらのソースも変異させないという品質があります。

2 つのリスト (またはその他の IEnumerable) の内容を列挙する必要があるだけで、Concatそのたびに単純に使用する場合、これには、統合されたリストを保持するために実際に新しいメモリを割り当てないという利点があります。

于 2008-09-19T07:26:23.637 に答える