Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎么可能对类型为“IEnumerable”的变量使用“ToArray()”_C# - Fatal编程技术网

C# 我怎么可能对类型为“IEnumerable”的变量使用“ToArray()”

C# 我怎么可能对类型为“IEnumerable”的变量使用“ToArray()”,c#,C#,在使用LINQ将匿名类型保存到IEnumerable类型的变量中之后,我发现可以在前面提到的变量上使用在类Enumerable内部定义的几种方法。这怎么可能?还应注意,IEnumerable是一个接口 下面是一个小代码示例: class MyClass { public string Name; } class Program { static void Main(string[] args) { MyClass[] myArray =

在使用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"?
    }


}

这使用了一个名为。该方法在一个单独的类中定义,因此得名-它扩展了原始类/接口的功能。第一个参数的前缀是this关键字,可以调用该方法,就好像它是该参数(即IEnumerable)上的方法一样


在您的示例中,您正在使用一个名为LINQ的库,它完全由扩展方法组成。您可以查看ToArray的源代码。您的代码将使用System.Linq;在顶部,这是允许您在代码中调用方法的部分。

我使用ToList:from myInstance in myArray,其中myInstance.Name==Bill select myInstance.ToList;所有使用IEnumerable的LINQ方法都是。IEnumerable是一个允许枚举的接口。ToArray所做的只是枚举IEnumerable并创建一个包含所有枚举值的新数组。到底是什么让你觉得奇怪,还是你不明白?使用System.Linq添加;ToArray是一种扩展方法,现在您可以执行var MyArray=variable.ToArray;Jon Skeet写了一系列关于Linq如何工作的有趣博客值得一读。