所以我在互联网上环顾四周阅读排序技术,我偶然发现了lambda。 现在我不完全确定它是如何工作的,我找不到任何将它分解到我的水平的教程。
这就是我试图打破的。
var sorted = list.OrderBy(x => new MailAddress(x).Host).ToList();
所以我得到了一个名为sorted的变量,这将是保存列表中已排序项的变量。
这是我不理解的部分
OrderBy(x => new MailAddress(x).Host)
x来自哪里以及lambda表达式究竟是什么意思? =>
它不像这个表达式!=
,这意味着不是。
雅虎,GMAIL&的Hotmail。
答案 0 :(得分:1)
简单来说,x是您声明的变量。
所以它读取" x使得x是" ...根据查询的输入和输出参数,您尝试传达的表达式是什么。
再举一个例子:
var sorted = list.Where(x => x.Name == "Foo").ToList();
这读作" x使得x等于Foo "。这将返回所有列表,其中Name属性等于Foo。
为了进一步解释这一点,让我们看一下重载的Enumerable方法,它是" 哪里"。根据MSDN:
实际语法是:
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扩展方法的重载版本之一。它说:
所以这里的来源是:
numbers.Where();
因为&#34; 数字&#34;变量是TSource的IEnumerable。 这里的TSource是任何类型的IEnumerable&#34; T &#34;或任何类型的实体。
现在最后一部分是它接受一个Func。 Func是预定义的委托类型。它为我们提供了一种以通用和简单的方式存储匿名方法的方法。为了进一步理解这一点,让我们再读一遍。它表示接受来源,将输出布尔结果。
现在让我们创建一个接受 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);