为什么.Concat方法的返回值类型看起来有点奇怪:System.Linq.Enumerable +(...)?

pen*_*ake 4 .net c# linq extension-methods concat

我有2个实例:

     foo and bar
Run Code Online (Sandbox Code Playgroud)

他们的类型是:

 foo.GetType().ToString()
Run Code Online (Sandbox Code Playgroud)

返回: System.Collections.Generic.List`1 [MyNameSpace.MyClass]

bar.GetType().ToString()
Run Code Online (Sandbox Code Playgroud)

返回: System.Collections.Generic.List`1 [MyNameSpace.MyClass]

当我将它们连接起来时:

var foobar = foo.Concat(bar);
Run Code Online (Sandbox Code Playgroud)

GetType()返回 System.Linq.Enumerable + d__71`1 [MyNameSpace.MyClass]

问题:这是什么意思?不应该是IEnumerable吗?

Tho*_*que 8

不要混淆声明的返回类型和返回值的实际类型.Concat声明返回IEnumerable<T>,但它实际上返回一个实现的具体类型的实例IEnumerable<T>.GetType返回具体类型,而不是声明的返回类型.

对于奇怪的名称,Concat使用迭代器块实现,并且迭代器块由编译器转换为具有诸如Enumerable+d__71该实现的名称的类型IEnumerable<T>.