什么时候,IEnumerable是否应该在IEnumerable <T>上使用?

Rob*_*ers 1 .net generics ienumerable

在下面的示例中,如果使用GetPeople的客户端代码想要将每个人的姓名和年龄打印到控制台,则必须使用反射(我猜)确定该查询包含IEnumerable(Of Person),然后将其转换为这样可以获得它的属性.

Public Function GetPeople() As IEnumerable
    Dim query = From p As Person In People.AsEnumerable() _
                Select p
    Return query
End Function
Run Code Online (Sandbox Code Playgroud)

IEnumerable的通用形式似乎对客户更有用,更有用:

Public Function GetPeople() As IEnumerable(Of Person)
    Dim query = From p As Person In People.AsEnumerable() _
                Select p
    Return query
End Function
Run Code Online (Sandbox Code Playgroud)

我确信有一个原因 - 那么,为什么IEnumerable会比IEnumerable(Of T)更受青睐?

谢谢.

Dou*_*ean 8

从我看来,从来没有.IEnumerable<T>继承IEnumerable,所以暴露将IEnumerable<T>你所知道的内容传达T给调用者,同时仍允许在泛型之前编写的函数使用该集合.

非通用IEnumerable存在的原因是历史的.