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

时间:2009-04-24 20:44:04

标签: c# .net linq

我很难理解LINQ,并得出结论,搜索几十个例子,直到找到一个接近我自己在C#中的应用程序的例子,并没有教我如何钓鱼。

回到我立刻碰到砖墙的文档。

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

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

如果有助于引用,则这一行与行号分解:

  1. Enumerable.Select
  2. (TSource,TResult)
  3. 方法
  4. (IEnumerable的(TSource&1+),
  5. 函数功能
  6. (TSource,TResult))

3 个答案:

答案 0 :(得分:7)

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

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, TResult> selector
)

<尖括号>表示此泛型方法的类型参数,我们可以通过查看类型参数的作用来开始探索方法的目的。

我们首先查看通用方法的名称:

Select<TSource, TResult>

这告诉我们,名为Select的方法处理两种不同的类型:

  • 类型TSource;和
  • 类型TResult

让我们看一下参数:

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

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

    IEnumerable<TResult>
    

    我们现在知道此方法将返回TResult枚举。

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

    示例:

    为了具体说明这一点,我们可以说TSource类型为Person(代表一个人的类,名称,年龄,性别等),TResult属于String类型(代表该人的姓名)。我们将为Select函数提供Person的列表,以及一个函数,给定Person将仅选择其名称。作为调用此Select函数的输出,我们将获得仅包含人名的String列表。

    <强>除了:

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

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

答案 1 :(得分:5)

思考Select的方法是映射序列的每个元素。因此:

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

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

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

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

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

IEnumerable<string> strings = ints.Select(i => i.ToString());

此处为IEnumerable<TSource>IEnumerable<int>),i => i.ToString()Func<TSource, TResult>Func<int, string>)。

答案 2 :(得分:0)

我认为C# in Depth后面的章节很好地解释了LINQ,以及它的意义。此外,本书的其余部分还教授了其他一些非常有用的C#知识。