4

我有 2 个实例:

     foo and bar

它们的类型是:

 foo.GetType().ToString()

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

bar.GetType().ToString()

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

当我连接它们时:

var foobar = foo.Concat(bar);

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

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

4

2 回答 2

8

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

至于奇怪的名字,Concat是用一个迭代器块来实现的,而迭代器块是由编译器转换成具有类似这样名字的类型的Enumerable+d__71implement IEnumerable<T>

于 2012-09-06T14:47:11.067 回答
0

除了 Thomas 的回答,请注意名称的“`1”部分表示通用参数的数量。每个通用参数的类型在括号“[...]”中。

于 2012-09-06T14:59:02.510 回答