リストからIEnumerable形式に変換


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

どのようにして変換するために行うもの_Book_ListIEnumerableフォーマット?


58
あなたの命名規則は不幸にもユニークです。
Kirk Woll、2011年

6
少なくとも彼には慣習がありますね。
Femaref '15年

1
Kirkのコメントに「ups」が非常に多い理由を不思議に思う人にとっては、変数に好きなように名前を付けることができないためです。そのための規則があり、コードを明確で理解できるようにするために、それらに従うことを強くお勧めします。これは、Stack-overflowやGitHubなどの場所であなたを助けようとしている人々を助けます!詳細については、本を読んでください:Robert C. MartinによるClean Code
KADEM Mohammed

1
...そして、スマーフ・ネーミングのアンチパターンの餌食にならないように命名規則に取りかかる方法は? devcards.io/smurf-naming-convention通常、名前空間は必要に応じて特定性を提供できます。
Meadock

回答:


150

変換する必要はありません。インターフェースをList<T>実装するIEnumerable<T>ため、すでに列挙可能です。

これは、次のものがあってもまったく問題ないことを意味します。

public IEnumerable<Book> GetBooks()
{
    List<Book> books = FetchEmFromSomewhere();    
    return books;
}

と同様:

public void ProcessBooks(IEnumerable<Book> books)
{
    // do something with those books
}

呼び出すことができます:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);

63

Assembly System.CoreおよびSystem.Linq名前空間で拡張メソッドAsEnumerableを使用できます。

List<Book> list = new List<Book>();
return list.AsEnumerable();

これは、このMSDNリンクで述べたように、コンパイル時にリストのタイプを変更します。これにより、必要なコレクションのみを列挙するメリットも得られます(MSDNの例を参照)。


シンプルに見えますが、変換する最も簡単な方法になります。ありがとう
Ishwor Khanal 2017

1
コレクションに何かを追加する予定がない場合は、IEnumerableを使用/返す必要があります。
AZ_


11

私が知る限り、List<T>実装しIEnumerable<T>ます。つまり、何も変換したりキャストしたりする必要はありません。


4
場合によります。a IEnumerable<IList<obj>>をan に設定しようとするとIEnumerable<IEnumerable<obj>>、2番目は最初のものから継承されないため、コンパイラエラーが発生します。
Emaborsa 2017

4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

ジェネリックバリアントの場合:

_Book_IE = _Book_List;

非一般的なものに変換したい場合:

IEnumerable ie = (IEnumerable)_Book_List;

5
ここではキャストは必要ありません。
Jon Skeet

2
それらのいくつかは明示的に実装されているので、非ジェネリックインターフェイスから特定のメソッドが必要な場合は、そうしますか、それともここで間違った軌道に乗っていますか?
Femaref 2011年

0

必要がある

using System.Linq;

IEnumerableオプションを使用するList

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.