私は複数のフィールドでカスタムコレクションを並べ替えるために、拡張メソッドOrderByとThenByを使用しています。このソートはコレクションには影響しませんが、代わりにIEnumberableを返します。 IEnumerableの結果をカスタムコレクションにキャストできません。とにかく、私のコレクションの順序を変更するか、IEnumerableの結果を私のカスタムコレクションに変換する必要はありますか?IEnumerableをC#のカスタムタイプに変換するにはどうすればよいですか?
答えて
あなたのコレクション型はIList<T>
を実装している場合(それにAdd()
ことができるように)あなたが拡張メソッドを書くことができます:
public static Extensions
{
public static TColl ToTypedCollection<TColl, T>(this IEnumerable ien)
where TColl : IList<T>, new()
{
TColl collection = new TColl();
foreach (var item in ien)
{
collection.Add((T) item);
}
return collection;
}
}
いいえありません。クエリ演算子を使用すると、元のコレクションのインスタンスを使用して列挙が生成されません。むしろ、この機能を提供するためにプライベートな実装(おそらく匿名、おそらくそうではない)を使用します。
元のコレクションに入れたい場合は、IEnumerable<T>
(またはコレクションが特定のものであればコレクションに格納されているもの)を取り、そのコンストラクタにクエリを渡すタイプのコンストラクタを用意する必要があります。
これを使用してIEnumerable<T>
の拡張メソッドを作成し、To<YourCollectionType>
とします。これはIEnumerable<T>
になり、タイプのコンストラクタに渡して返します。
いいえToListとToDictionary拡張メソッドで設定されたパターンに従うことができます。同様の拡張メソッドを記述して、独自のコレクションタイプをIEnumerableからロードします。
カスタム収集をソートできるように、IComparerの独自のインスタンスを作成できます。
ブルートフォースIEnumerableをループし、各アイテムをカスタムコレクションの新しいインスタンスにダンプすることができます。
あなたはIEnumerableをして、リストを初期化することができます。
項目はタイプIEnumerableをである場合、あなたはこのようなリストを作成することができます
var list = new List<string>(items);
またはあなたは、単に(items.ToListを呼び出すことができますが):
var list = items.ToList();
カスタムコレクションはどのインターフェイスを実装していますか?
その場合のIListは、あなたがそのがIDictionaryのは、あなたがIEnumerableを その他、各種上.ToDictionary()を行うことができるだろうとした場合のIEnumerable に.ToList()を行うことができると思います。..
これはあなたのためにより実行可能なものに持って来る。
何も似ていない場合は、IEnumerableの拡張メソッドを.ToMyCollection()に書き込むことができます。
エナメルテーブルとコレクションはかなり異なる獣です。
列挙型では、コレクションにインデックスベースのアクセサ、Countプロパティなどがある間だけ列挙できます。コレクションを作成するには、実際にはIEnumerableを列挙する必要があります。リスト<T>のような典型的なコレクションには、IEnumerableを受け入れるコンストラクタがあります。それにもかかわらず、列挙が実行されます。
System.Linq。列挙クラスあなたがこのアプローチに従うと、カスタムコレクションに変換する独自の拡張メソッドを作成することができ
var myEnumerable = this.GetEnumerator();
var array = myEnumerable.ToArray();
var list myEnumerable.ToList();
あなたがいずれかの配列にあなたのIEnumerableタイプを変換するaloowますいくつかの拡張メソッド、ToListメソッドがあります
public static CustomCollection<TSource> ToCustomCollection<TSource>(this IEnumerable<TSource> source);
LINQは、このようなソースコレクションを変更不可能なものとして扱うので、クールです。変更しないからです。拡張メソッドを使用すると、指定した別の順序で列挙されます。このように新しいカスタムリストを作成するわけではありません。
私は2つの選択肢を示唆している:カスタムコレクションにソート機能を実装(またはとして素敵なソート可能なジェネリックコレクションを使用し、自分自身があなたのLINQ-INGの
- をベース)であるので、インプレースでソートすることができます。
あなたが本当にすべてでカスタムコレクション型を必要ですか?これでやりたいことは、既存の汎用コレクション型によって提供されているように思えますし、拡張メソッドを追加するだけで済みます。
- 1. IEnumerable <Enum>をC#でEnumに変換するにはどうすればよいですか?
- 2. C#では、配列をIEnumerable <IMyInterface>からIEnumerable <T>に変換するにはどうすればよいですか? C#ので
- 3. Go lang - インターフェイスをカスタムタイプに変換するにはどうすればよいですか?
- 4. アセンブリコードをCに変換するにはどうすればよいですか?
- 5. IEnumerable <MyClass>をDataTableに変換するにはどうすればよいですか?
- 6. C#でFileOpen(VB.NET)を使用するにはどうすればよいですか?このコードをどのように変換すればよいですか?
- 7. この関数をCからC#に変換するにはどうすればよいですか?
- 8. Obj-CコードなしでNSStringをC++のCStringに変換するにはどうすればよいですか?
- 9. C++:CライブラリファイルIOをC++ストリームIOに変換するにはどうすればよいですか?
- 10. シングルトンIEnumerableを作成するにはどうすればよいですか?
- 11. このC#foreachコードをC++に変換するにはどうすればよいですか?
- 12. C#で文字列を変数名に変換するにはどうすればよいですか?
- 13. C++でカテゴリデータをバイナリ変数に変換するにはどうすればよいですか?
- 14. CでIP4とIP6のアドレスを長い値に変換するにはどうすればよいですか?
- 15. Lucene.Net:MultiFiledQueryParserをBooleanQueryに変換するにはどうすればよいですか?
- 16. ハッシュタグテキストをハッシュタグハイパーリンクに変換するにはどうすればよいですか?
- 17. CodeVariableDeclarationStatementをCodeAssignmentStatementに変換するにはどうすればよいですか?
- 18. intをNSStringに変換するにはどうすればよいですか?
- 19. wchar_t *をwstringに変換するにはどうすればよいですか?
- 20. TDateTimeをFILETIMEに変換するにはどうすればよいですか?
- 21. StreamWriterをストリームに変換するにはどうすればよいですか?
- 22. string []をArrayListに変換するにはどうすればよいですか?
- 23. SqlXmlをXmlTextに変換するにはどうすればよいですか?
- 24. byte []をBitmapに変換するにはどうすればよいですか?
- 25. キャンバスコンテンツをイメージに変換するにはどうすればよいですか?
- 26. IntPtrをストリームに変換するにはどうすればよいですか?
- 27. オーディオをテキストに変換するにはどうすればよいですか?
- 28. char *をdouble *に変換するにはどうすればよいですか?
- 29. wavrecordをaudiorecorderに変換するにはどうすればよいですか?
- 30. バイトをmbに変換するにはどうすればよいですか?
優秀、ありがとうございます! –
このアイデアは私を完全に助けました。ありがとう! – jeremcc
その面白い、私は同じ質問をした、同じ答えで来て、それを行うより良い方法があるかどうかを見て周りにまだ... – Nevyn