首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ToArray()和ToArray<int>()的区别;

ToArray()和ToArray<int>()的区别;
EN

Stack Overflow用户
提问于 2013-06-12 09:23:32
回答 5查看 540关注 0票数 7

如果我问了一个愚蠢的问题,请原谅,但是谁能解释一下下面两个呼叫(ToArray)之间的区别。在intellisense中,它不会将它们显示为重载方法&当然,两个调用的输出是相同的。

代码语言:javascript
复制
List<int> i = new List<int> { 1, 2, 5, 64 };
int[] input = i.Where(j => j % 2 == 1).ToArray();
input = i.Where(j => j % 2 == 1).ToArray<int>();
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-12 09:27:08

这里没有区别。在第一次调用中,编译器推断出了int类型,而在第二次调用中,您显式地指定了它。

在某些情况下,该类型可能是必需的,因为它无法推断。例如,您有一个自定义集合,它为两种不同类型的T实现了两次IEnumerable<T>。这会损害可用性,所以最好避免这样的构造。

票数 5
EN

Stack Overflow用户

发布于 2013-06-12 09:27:30

这没有区别,它是完全相同的ToArray()方法。编译器可以简单地从表达式的语法推断出您想要的ToArray<int>版本。Where()的返回值被推断为返回int。换句话说,它使用Where<int>()。这是从List<>的类型中推断出来的。因此它可以推断您需要ToArray<int>

因此,类型推理链是List<int> => Where<int>() => ToArray<int>()

例如,将列表更改为List<long>,表达式仍然有效,而不必修改它。

票数 6
EN

Stack Overflow用户

发布于 2013-06-12 09:27:24

这是相同的泛型方法。在第一种情况下,泛型类型参数是由编译器从您调用ToArray<T>()的枚举的泛型类型参数中推断出来的。但是您也可以显式地指定它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17056316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档