看看下面的代码:
为什么result1有2个通用参数?
public class Program { public static void Main(string[] args) { IEnumerableresult1 = Test1(); Console.WriteLine(result1.GetType().GetGenericArguments().Count()); // 2 IEnumerable result2 = Test2(); Console.WriteLine(result2.GetType().GetGenericArguments().Count()); // 1 } public static IEnumerable Test1() { return new Test[] { }.Where(t => t.Id > 1).Select(t => { t.Id++; return t; }); } public static IEnumerable Test2() { return new Test[] { }.Where(t => t.Id > 1); } } public class Test { public virtual int Id { get; set; } }
tyranid.. 7
这是因为从Test1返回的是WhereSelectArrayIterator的一个实例,它接受两个通用参数,一个源类型和一个结果类型.即class WhereSelectArrayIterator
或参见参考源.
但是,类本身实现了IEnumerable
在这种情况下,打印类型的名称将给你答案.
这是因为从Test1返回的是WhereSelectArrayIterator的一个实例,它接受两个通用参数,一个源类型和一个结果类型.即class WhereSelectArrayIterator
或参见参考源.
但是,类本身实现了IEnumerable
在这种情况下,打印类型的名称将给你答案.