c#语法和Linq,IQueryable

hdi*_*ver 3 c# linq iqueryable

这是关于c#的SYNTAX的问题,而不是关于我们如何调用/使用IQueryable的问题

有人可以向我解释一下:

我们有这个声明(System.Linq):

public static double Average<TSource>(this IQueryable<TSource> source,
                                      Expression<Func<TSource, int>> selector)
Run Code Online (Sandbox Code Playgroud)

并致电平均值

double average = fruits.AsQueryable().Average(s => s.Length);
Run Code Online (Sandbox Code Playgroud)

我理解如何调用Average和IQueryable的所有类似的静态方法,但我不理解声明的语法.

public static double Average<TSource>(this IQueryable<TSource> source,
                                      Expression<Func<TSource, int>> selector)
Run Code Online (Sandbox Code Playgroud)

什么是<TSource>平均的Average<TSource>( ,也是this IQueryable<TSource> source.

因为我们调用它时只有一个参数和实际的lambda表达式 (s => s.Length);

提前致谢.

Jon*_*eet 6

<TSource>部分声明了该方法的泛型类型参数 - 基本上是序列包含的元素类型.在进入LINQ之前,你一定要理解泛型.

然后,

this IQueryable<TSource> source
Run Code Online (Sandbox Code Playgroud)

表示方法的第一个参数:

  • this表示它是一种扩展方法
  • IQueryable<TSource> 表示参数的类型
  • source 是参数的名称

它是一种扩展方法的事实可能让你感到困惑.你打电话的时候

query.Average(s => s.Length)
Run Code Online (Sandbox Code Playgroud)

由编译器转换为

Queryable.Average(query, s => s.Length)
Run Code Online (Sandbox Code Playgroud)