[英]How is it possible for me to use "ToArray<T>()" on a variable of type "IEnumerable<out T>"
使用 LINQ 将匿名类型保存到“IEnumerable”类型的变量中后,我发现可以使用在上述变量的“Enumerable”类中定义的几种方法。 这怎么可能? 还应注意,“IEnumerable”是一个接口。
这是一个小代码示例:
class MyClass
{
public string Name;
}
class Program
{
static void Main(string[] args)
{
MyClass[] myArray =
{
new MyClass{Name = "Bill"},
new MyClass{Name = "Bill"},
new MyClass{Name = "Steve"}
};
IEnumerable<MyClass> variable = from myInstance in myArray
where myInstance.Name == "Bill"
select myInstance;
MyClass[] newArray = variable.ToArray<MyClass>(); // How is it possible for me to use "ToArray<T>()" on "varialble"?
}
}
这使用称为扩展方法的 C# 功能。 该方法在一个单独的类中定义(因此得名 - 它扩展了原始类/接口的功能)。 第一个参数以this
关键字为前缀,并且可以像调用该方法一样调用该方法(即在您的IEnumerable<MyClass>
)。
在您的示例中,您使用的是一个名为 LINQ 的库,它完全由扩展方法组成。 您可以在 github 上查看ToArray
的源代码。 您的代码将using System.Linq;
在顶部,它允许您在代码中调用该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.