c# – 对LINQ参数感到困惑

我正在努力了解LINQ并对使用它充满信心.我正在努力的是要求的参数.例:

var sortedWords = words.OrderBy(a=>a.Length)

单词是一个数组集合. OrderBy的intellisense说:

Func<string, TKey> keyselector

func执行一个方法,字符串是值,TKey是一个键.

在示例http://msdn.microsoft.com/en-us/vcsharp/aa336756.aspx#thenBySimple(ThenBy – Comparer)中,我们通过说a =>来比较长度.则为a.length.我理解语法,但这与intellisense要求的内容有何关系?

由于所有的泛型,我倾向于发现方法签名和intellisense不可读.

谢谢.

最佳答案
a => a.Length

I understand that syntax, but how is that related to what the intellisense is asking for?

这段代码是lambda表达式. lambda表达式是生成Anonymous方法(在本例中)或System.Linq.Expressions.Expression的便捷方式.让我们按部分分解.

>最显着的特征是=>,它从方法体中分离参数.
>在>的左侧,有一个符号:a.这是我们的匿名方法的参数声明.编译器知道我们正在调用OrderBy(),而OrderBy需要一个Func< string,object>.此类函数的参数是字符串,因此编译器确定必须是字符串.程序员唯一需要提供的就是名字.
>在>的右侧,有方法体.由于这是一个单行,因此隐含了return关键字. IDE提供针对字符串的智能感知,允许您使用Length属性.

现在,考虑一下这个C#2.0 ……

IEnumerable<string> sortedWords = 
  Enumerable.OrderBy(words, delegate(string a) {return a.Length;});

随着C#3.0

IEnumerable<string> sortedWords = words
  .OrderBy(a => a.Length);

转载注明原文:c# – 对LINQ参数感到困惑 - 代码日志