x在这个lambda表达式中来自哪里?

时间:2017-04-01 12:05:49

标签: c# .net lambda

所以我在互联网上环顾四周阅读排序技术,我偶然发现了lambda。 现在我不完全确定它是如何工作的,我找不到任何将它分解到我的水平的教程。

这就是我试图打破的。

var sorted = list.OrderBy(x => new MailAddress(x).Host).ToList();

所以我得到了一个名为sorted的变量,这将是保存列表中已排序项的变量。

这是我不理解的部分

OrderBy(x => new MailAddress(x).Host)

x来自哪里以及lambda表达式究竟是什么意思? => 它不像这个表达式!=,这意味着不是。 雅虎,GMAIL&的Hotmail。

1 个答案:

答案 0 :(得分:1)

简单来说,x是您声明的变量。

所以它读取" x使得x是" ...根据查询的输入和输出参数,您尝试传达的表达式是什么。

再举一个例子:

var sorted = list.Where(x => x.Name == "Foo").ToList();

这读作" x使得x等于Foo "。这将返回所有列表,其中Name属性等于Foo。

为了进一步解释这一点,让我们看一下重载的Enumerable方法,它是" 哪里"。根据MSDN:

enter image description here

实际语法是:

Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate

再举一个例子,我们声明一个整数列表。我们的目标是获得所有整数:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

现在要查询所有偶数数的整数,我们将使用lambda语法使用Where扩展方法的重载版本之一。它说:

enter image description here

所以这里的来源是:

numbers.Where();

因为&#34; 数字&#34;变量是TSource的IEnumerable。 这里的TSource是任何类型的IEnumerable&#34; T &#34;或任何类型的实体。

现在最后一部分是它接受一个Func。 Func是预定义的委托类型。它为我们提供了一种以通用和简单的方式存储匿名方法的方法。为了进一步理解这一点,让我们再读一遍。它表示接受来源将输出布尔结果

enter image description here

现在让我们创建一个接受 TSource 的Func,在这种情况下,整数作为示例,输出布尔结果

Func<int, bool> fncParameter = x => x % 2 == 0;

现在我们可以将它传递给我们的:

numbers.Where

将是:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Func<int, bool> fncParameter = x => x % 2 == 0;
IEnumerable<int> result = numbers.Where(fncParameter);

或简而言之:

ist<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int> result = numbers.Where(x => x % 2 == 0);