2009-11-03 20 views
6

私は静的なクラスをやろうとしますが、icollectionに追加しますが、私はいくつかの問題を抱えています。それは私が方法でICollectionを渡すことができるようになる方法ですか?原因はTです。それは解決できないと言います。T? AddRange ICollection?

そして、私はicollectionにAddRangeを行う方法があるのだろうか?

私はこれのようなものを考えていましたが、マビーは私がそれで私の心から抜け出すのですか?

public static ICollection<T> add(this IEnumerable<T> list) 
    { 
     ICollection<T> collection = null; 

     return collection.AddRange(list);    
    } 
+2

なぜマークダウンですか? –

答えて

15

いいえ、ICollection<T>AddRangeメソッドを持っていない - とそれがなかった場合でも、あなたはNullReferenceExceptionをスローします間接参照nullにしようとするだろう。リストを追加するためのコレクションを指定していません...あなたは正確に何をしようとしていますか?

あなたは(例えば)新しいList<T>を作成することができます - それは、すでにIEnumerable<T>を取ることができ、コンストラクタを持つことの利点を持っています

public static ICollection<T> Add<T>(this IEnumerable<T> list) 
{ 
    return new List<T>(list);    
} 

はしかし、その時点で、あなたは本当にただEnumerable.ToList()を再実装してきましたし、

public static ICollection<T> AddTo<T>(this IEnumerable<T> list, 
             ICollection<T> collection) 
{ 
    foreach (T item in list) 
    { 
     collection.Add(item); 
    } 
    return collection; 
} 
:既存のコレクションにすべてのものを追加したい場合は、それを別の戻り値の型...

を与え、あなたはこのような何かをしたいかもしれません

+0

新しい名前を愛しています...どちらが誰か分かりませんでした。 :-P –

+0

ジェネリックメソッド引数がありません:) – leppie

+0

@leppie:ちょうどそれを編集で見つけました。 –

4

私が正しく理解している場合は、空のコレクションにIEnumerable<T>を追加します。

ICollection<MyObject> collection = new List<MyObject>(GetIEnumerableOfMyObject()); 

あるいは:

ICollection<MyObject> collection = GetIEnumerableOfMyObject().ToList(); 
+0

私はICollectionを実行してそのようなリストを作成できるかどうかわかりませんでした。 –

+0

'リスト'は 'ICollection 'を実装しています。 –

0

を別のアプローチはのように、List(T).ForEachを使用することです、あなたのソースリストのコレクションの種類に応じて

はそれだけで行うことが容易ではないでしょう:

List<string> source = ... 
ICollection<string> dest = ... 

source.Foreach(dest.Add); 

ただし、この可読性はeasy to disputeです。

1

他の方法では、ICollectionが空であり、ICollectionがListのタイプであると思われるようです。あなたがAddRangeをしたい場合は、次のようにしかし、あなたはいるICollectionクラスを拡張することができます

public static void AddRange<T>(this ICollection<T> ic, IEnumerable<T> ie) 
{ 
    foreach (T obj in ie) 
    { 
     ic.Add(obj); 
    } 
} 

リストがいるICollectionをimplimentsので、リストのオブジェクトを直接扱うとき、これはあいまいさを引き起こす可能性があることが注意、(私は持っていないにもかかわらずコンパイラがそれを解決できるかどうかはまだテストされている - 私の嫌な反応は、AddRangeがListのメンバーであり、コンパイラは拡張機能を見る前にメンバ関数を最初に実行するはずだが、もし私が間違っていれば私は誰かが私を修正すると確信しています)。

関連する問題