2017-04-01 94 views
0

因此,我在網上閱讀了關於排序技術的書,並且偶然發現了lambda。 現在我不完全知道它是如何工作的,我找不到任何教程將其分解到我的水平。x從哪裏來的lambda表達式?

這就是我試圖分解。

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

所以我得到,我創建了一個名爲sorted的變量,這將是從列表中保存排序項目的變量。

這是我的不理解的部分

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

哪裏X來自和什麼不lambda表達式是什麼意思? => 它不像這個表達式!=這意味着不是。 我明白它由主機排序,所以雅虎,GMAIL & Hotmail。

+0

我認爲你的問題可能** **是 「?什麼是lambda表達式」 –

+0

「x」只是一個標識符 –

+0

MS文檔:[Lambda表達式(C#編程指南)](https://msdn.microsoft.com/en-us/library/bb397687.aspx)x被稱爲輸入參數 – Nkosi

回答

1

用最簡單的術語來說,x是你聲明的變量。

因此它讀取「x使得x是」 ...無論您試圖根據您的查詢的輸入和輸出參數傳達的表達式。

爲了給你舉個例子:

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

該讀作 「x滿足x等於的Foo」。這將返回與Foo相等的Name屬性的所有列表。

爲了進一步解釋這一點,讓我們看看Enumerable方法的重載方法之一是「Where」。根據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語法。它說:

enter image description here

所以這裏的來源是:

numbers.Where(); 

由於 「數字」 變量是TSource的IEnumerable的。 此處的TSource是任何類型爲「T」的IEnumerable或任何類型的實體。

現在最後一部分是它接受一個Func。 Func是預定義的委託類型。它爲我們提供了一種以通用和簡單的方式存儲匿名方法的方法。爲了進一步理解這一點,讓我們再讀一遍。它說它會接受源,並且將輸出布爾結果

enter image description here

現在,讓我們創建一個接受TSource,在這種情況下,FUNC鍵整數作爲我們的榜樣,將輸出布爾結果

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

現在我們可以傳遞into our:

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); 
+1

我認爲你會讓'OrderBy'和'Where'混在一起。 – juharr

+0

你有沒有機會解釋這個問題有點過分或過於類似? –

+0

我更新了我的答案。讓我知道它是否有幫助,或者您是否有疑問。 @ChristofferNilsson –