8

静的クラスを実行して icollection に追加しようとしていますが、克服できない問題がいくつかあります。メソッドで ICollection を渡すことができるようにするにはどうすればよいですか? 原因 T は、解決できないと言っています。

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

私はこのようなことを考えていましたが、多分私はそれで頭がおかしくなりましたか?

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

        return collection.AddRange(list);            
    }
4

4 に答える 4

17

いいえ、メソッドICollection<T>はありません。AddRangeたとえあったとしても、.nullをスローする逆参照を試みることになりますNullReferenceException。リストを追加するコレクションを指定していません...正確に何をしようとしていますか?

新しい - を作成 (たとえば) することができます。これには、 :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;
}
于 2009-11-03T14:24:47.057 に答える
4

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

次のようにする方が簡単ではないでしょうか。

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

あるいは:

ICollection<MyObject> collection = GetIEnumerableOfMyObject().ToList();
于 2009-11-03T14:27:08.817 に答える
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);
    }
}

ただし、List は ICollection を実装しているため、List オブジェクトを直接処理するときにあいまいさが生じる可能性があることに注意してください (ただし、コンパイラが解決できるかどうかはまだテストしていませんが、そうすべきだというのが私の直感です。 AddRange は List のメンバーであり、コンパイラは拡張機能を調べる前に最初にメンバー関数を調べますが、間違っている場合は誰かが私を修正してくれると確信しています)。

于 2013-01-08T21:42:15.693 に答える
0

ソースリストのコレクションタイプに応じて、次のように別のアプローチを使用することもできますList(T).ForEach

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

source.Foreach(dest.Add);

ただし、これの読みやすさは論争しやすいです。

于 2012-07-27T10:33:05.997 に答える