gpt4 book ai didi

c# - IEnumerable.ToArray() 与 IEnumerable.Cast().ToArray()

转载 作者:太空狗 更新时间:2023-10-30 00:46:06 28 4
gpt4 key购买 nike

当尝试从 IEnumerable 对象集合中获取对象数组时(与我想要的数组不同的转换方式),我知道我可以先将源集合转换为正确的类型,然后从中获取数组,但是方法 ToArray<T>() 给我的印象是它可以一步处理这两个操作。不过,根据我的经验,我从未能够找到 ToArray<T>() 的情况。 方法适用于除原始源 T 之外的任何 T(在我看来,这使 ToArray<T>() 变得愚蠢,因为它与非通用 ToArray( ) 已经这样做了)。

所以我的问题是,我是否错过了 ToArray<T>() 的要点? 方法,我试图让它做一些它从未打算做的事情,或者我在该方法方面是否遗漏了一些愚蠢的东西,而我正在尝试做的事情通常遵循它的意图?

这里有一个具体的例子来说明我的问题:

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();
}

最佳答案

原因ToArray<T>()是通用的,因此它可以在任何上运行 IEnumerable<T> , 不是这样你就可以提供不同的 T :

public static T[] ToArray<T>(this IEnumerable<T> self) { ... }

您永远不需要提供 T你自己。如果您这样做了,就像在您的示例中一样,该方法将期望收到例如 IEnumerable<IFoo>。 ,您不提供。

仅供引用,没有“非通用 ToArray()”。编译器正在推断 T基于您调用 ToArray() 的可枚举类型的通用参数。

关于c# - IEnumerable.ToArray<T>() 与 IEnumerable.Cast<T>().ToArray(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147344/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com