从列表转换为IEnumerable格式


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

如何转换_Book_ListIEnumerable格式?


58
您的命名约定很不幸是唯一的。
Kirk Woll

6
至少他有约定,对吗?
Femaref 2011年

1
对于想知道为什么Kirk的评论为什么会有这么多“变数”的人们,这是因为您不能只是按照自己想要的方式命名变量!有一些约定,强烈建议您遵循它们,以便您的代码清晰易懂,这将有助于在Stack-overflow或GitHub等地方为您提供帮助的人们!有关更多信息,请阅读Robert C. Martin 的著作:Clean Code
KADEM Mohammed

1
...以及如何在不影响蓝精灵命名反模式的前提下达成命名约定? devcards.io/smurf-naming-convention通常,名称空间可以在需要的地方提供特定性。
Meadock

Answers:


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链接上所说的那样,这将在编译时更改List的类型。这也将给您带来好处,仅枚举我们所需的集合(有关此信息,请参见MSDN示例)。


看起来很简单,但却是最简单的转换方式。谢谢
Ishwor Khanal

1
如果您不打算向集合中添加内容,则应使用/返回IEnumerable。
AZ_19年


11

据我所知List<T>器物IEnumerable<T>。这意味着您不必转换或转换任何内容。


4
这取决于。如果您尝试将a设置为a IEnumerable<IList<obj>>IEnumerable<IEnumerable<obj>>则会产生编译器错误,因为第二个不继承第一个。
Emaborsa

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

如果是通用变体:

_Book_IE = _Book_List;

如果要转换为非通用的:

IEnumerable ie = (IEnumerable)_Book_List;

5
您不需要此处的演员表。
乔恩·斯基特

2
如果您要从非泛型接口中获取特定方法,因为它们中的某些已显式实现,或者我在这里走错了路,该怎么办?
Femaref 2011年

0

你需要

using System.Linq;

IEnumerable在您的网站上使用选项List

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.