2016-06-28 18 views
2

私は拡張メソッドを作成するたびに、IListと配列コレクション[]を実装するもので、異なるコレクションで使用したいいくつかの拡張メソッドを作成しています。私はIEnumerableを使用傾けるよう両方一般的な拡張メソッドC#

public static IList<T> Shuffle<T>(this IList<T> inputCollection) 
    { 

    } 

    public static T[] Shuffle<T>(this T[] inputCollection) 
    { 

    } 

のために働くことができます私の方法のほとんどは、インデックスとの作業を必要と私はちょうど1拡張メソッドを記述し、所望のコレクションの両方のためにそれを使用することができますいくつかの他の方法はありますか?また、時々私はもう一つの方法であるstringを使用します。

+0

新しいコレクションを返す場合は、IEnumerable <>で十分です。しかし、確かにICollection <>が正しい風味であるように、実際にはそうしたくないのです。 –

+2

配列には 'IList 'が実装されているので、実装に応じてそれらのうちのどれか一つが必要ないかもしれません。 –

+0

オプション1は両方の配列で実装された非永続的な 'IList'インターフェースを使用し、' List 'を使用します。もう一つのオプションはIList を実装する配列用のラッパーを作成することですが、ラッパー(配列).ListExtMethod() ' – csharpfolk

答えて

6

あなたは

public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> value) 

署名を試すことができます。すべてListオブジェクトがIEnumerableから継承されているためと

IList<T> list = Shuffle(myList).ToList(); 
T[] array = Shuffle(myArray).ToArray(); 

あるいは

IList<T> list = myList.Shuffle().ToList(); 
T[] array = myArray.Shuffle().ToArray(); 
+0

を実装していますが、 'this IEnumerable value'を使用すると、自分のメソッドでインデクシングを適用できません。 – PreqlSusSpermaOhranitel

+0

@PreqlSusSpermaOhranitel:配列に変換するだけです: 'T [] data = value.ToArray();' –

+0

大きな問題は私の問題を解決します! – PreqlSusSpermaOhranitel

0

それを使用する私は、この拡張メソッドを使用してお勧めします。

public static IEnumerable<T> MethodName<T>(this IEnumerable<T> value) 
関連する問題