ToArray()和ToArray之间的区别<int>();

Atu*_*eka 7 .net c#

对不起,如果我问愚蠢的问题,但任何人都可以解释下面两个电话之间的区别(ToArray).在intellisense中它不会将它们显示为重载方法,当然两个调用的输出都是相同的.

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>();
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

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

所以类型推断链是List<int>=> Where<int>()=> ToArray<int>().

例如,将列表更改为,List<long>表达式仍然有效,无需修改.


Mik*_*ray 5

这里没有区别.在第一次调用中,编译器已推断出类型int,而在第二次调用中,您已明确指定了类型.

可能存在类型是必要的情况,因为无法推断.例如,IEnumerable<T>对于两种不同的类型,您有一个实现两次的自定义集合T.这会损害可用性,因此最好避免使用这种结构.