繁体   English   中英

我怎么可能使用“ToArray<T> ()” 类型为“IEnumerable”的变量<out T> ”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM