如何解析MSDN上的Select方法文档?

Dav*_*ith 6 .net c# linq

我正在努力探索LINQ,并得出结论,搜索几十个例子,直到我找到一个接近我自己在C#中的应用程序,并没有教我如何钓鱼.

所以回到我立即打砖墙的文档.

有人可以帮我解密一下在msdn http://msdn.microsoft.com/en-us/library/bb548891.aspx上提供的Enumerable.Select方法, 并作为Intellisense的提示给出?

Enumerable.Select(TSource,TResult)方法(IEnumerable(TSource>),Func(TSource,TResult))

如果有助于参考,这是与行号分解的同一行:

  1. Enumerable.Select
  2. (TSource,TResult)
  3. 方法
  4. (IEnumerable的(TSource>),
  5. FUNC
  6. (TSource,TResult))

Dan*_*nov 7

从您引用的MSDN文章中查看C#中此方法的定义可能会有所帮助:

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, TResult> selector
)
Run Code Online (Sandbox Code Playgroud)

<尖括号>表示类型参数,这个泛型方法,我们可以简单地通过看什么类型的参数都在做开始探索方法的目的.

我们首先查看泛型方法的名称:

Select<TSource, TResult>
Run Code Online (Sandbox Code Playgroud)

这告诉我们调用的方法Select处理两种不同的类型:

  • 类型TSource; 和
  • 类型 TResult

我们来看看参数:

  1. 第一个参数是IEnumerable<TSource> source- 一个提供TSource枚举的源.
  2. 第二个参数是Func<TSource, TResult> selector- 一个选择器函数,它将a TSource转换为a TResult.(这可以通过探索定义来验证Func)

然后我们看看它的返回值:

IEnumerable<TResult>
Run Code Online (Sandbox Code Playgroud)

我们现在知道这个方法会返回一个TResult枚举.

总而言之,我们有一个枚举的TSource函数,以及一个接受单个TSource项并返回TResult项的选择器函数,然后整个select函数返回一个枚举TResult.

一个例子:

为了具体而言,我们可以说TSource是类型Person(代表一个人的类,具有名称,年龄,性别等),并且TResult是类型String(代表人的名字).我们将给Select函数一个Persons 列表,以及一个函数,给定一个Person将只选择它们的名称.作为调用此Select函数的输出,我们将获得一个String仅包含人名的s 列表.

在旁边:

原始方法签名的最后一块拼图位于顶部,是this第一个参数之前的关键字.这是定义扩展方法的语法的一部分,它实质上意味着不是调用静态Select方法(传入源枚举和选择器函数),而是直接在枚举上调用Select方法,就像如果它有一个Select方法(并且只传入一个参数 - 选择器函数).

我希望这能让你更清楚吗?


ito*_*son 5

想到Select的方法是映射序列的每个元素.因此:

Enumerable.Select<TSource, TResult>:Select方法由其源和结果类型(您要映射的事物的类型以及要将其映射到的类型)参数化

IEnumerable<TSource>:要映射的事物序列

Func<TSource, TResult>:映射函数,将应用于源序列的每个元素

结果是IEnumerable<TResult>一系列映射结果.

例如,您可以想象(作为一个简单的示例)将整数序列映射到字符串表示:

IEnumerable<string> strings = ints.Select(i => i.ToString());
Run Code Online (Sandbox Code Playgroud)

这里整数是IEnumerable<TSource>(IEnumerable<int>)和i => i.ToString()Func<TSource, TResult>(Func<int, string>).