当我试图从一个IEnumerable对象集合中获取一个对象数组(与我想要的数组类型不同),我知道我可以先将源集合转换为正确的类型,然后从中获取一个数组,但是方法ToArray()给我一种它可以在一步中处理这两个操作的印象。然而,根据我的经验,我从来没有找到过ToArray()方法适用于除原始源T之外的任何T的情况(在我看来,这使得ToArray()变得可笑,因为它做的事情与非泛型ToArray()已经做了相同的事情)。
所以我的问题是,我是否误解了ToArray()方法的意义,我试图让它做一些它从未打算做的事情,还是我在关于该方法方面缺少了什么,并且我正在尝试做的事情通常符合其意图?
以下是一个具体的示例,以说明我的问题:
所以我的问题是,我是否误解了ToArray()方法的意义,我试图让它做一些它从未打算做的事情,还是我在关于该方法方面缺少了什么,并且我正在尝试做的事情通常符合其意图?
以下是一个具体的示例,以说明我的问题:
public interface IFoo { }
public class Foo : IFoo { }
static void Main(string[] args)
{
// Suppose a list of Foos was created
List<Foo> src = new List<Foo>();
// I would be safe obtaining an array of IFoos from that list, but
// This is not supported (although intellisense shows the method is there, the compiler balks):
// IFoo[] results = src.ToArray<IFoo>();
// Whereas this works just fine:
IFoo[] results = src.Cast<IFoo>().ToArray();
}
T
,因为IEnumerable<out T>
中的T
是协变的? - CodesInChaos