【发布时间】:2011-04-02 19:24:23
【问题描述】:
抱歉 - 不确定更好的名称,如果您能想到更好的名称,请修改。
我正在尝试了解更多关于 IEnumerable/collections/generics 的知识,并且我认为我已经取得了一些进展,直到这个例子让我明白了:
var nums = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10 };
var result = FilterNums(nums, i => i % 2 != 0);
.....
public static IEnumerable<T1> FilterNums<T1>(IEnumerable<T1> numslist, Func<T1, bool> predicateDelegate)
.....
为什么调用FilterNums 有效?如果我将其更改为FilterNums<int>,它仍然可以工作,这正是我真正希望输入的内容。
那么,是如何检测 lambda 查询的 T1 并且不需要我编写它还是发生了其他事情?
【问题讨论】:
-
var 不是 Variant 类型,就像您在其他语言中可能发现的那样,编译器只是在编译期间为您将其重命名为正确的类型。它通过“类型推断”(参见 Linkgoron 的回答)来做到这一点,在您的示例中,它只能是
int,因此您不需要明确指定。