我講錯的話,歡迎公幹我!高中同學們下面這些對你們來講太深奧了,賣來鬧!
因為微軟常弄一些新語法,沒人叫你使用,只是為了要複製、貼上,
所以總要看的懂吧!
//我有一堆水果:蘋果、香蕉、芒果、橘子………
List<string> fruits = new List<string>
{ "apple", "banana", "mango", "orange", "blueberry", "strawberry" };
//我要找出名字長度小於6的水果
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
//一個一個列出來給我看。
foreach (string fruit in query)
{ Console.WriteLine(fruit); }
/* 所以結果是: apple mango */
fruits.Where(fruit => fruit.Length < 6)
我要講的是 Where ,看一下下面的方法定義
public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate )
- Where 是擴充方法 (在既有型別上擴充新的方法,不去實作衍生型別)
而且只有實作IEnumerable<TSource>的型別才可使用,
而frults是 List<T> (public class List<T> : IEnumerable<T>..)。
- Func<TSource, bool> predicate
是說predisate 你就代表一種方法
這種方法需要一個TSource型別的參數(ex int,string,double…)
而這方法回傳回bool(是,否)。
所以勒為什麼這邊Where裡要寫fruit => fruit.Length < 6
fruit => fruit.Length < 6 Lamba 運算式
(暫時不講Lamba 因為又很長)
這樣看吧!改寫
System.Linq.Expressions.Expression<Func<string, bool>> expr
= fruit => fruit.Length < 6; (有更麻煩的寫法)
Func<string, bool> deleg2 = expr.Compile();
IEnumerable<string> query = fruits.Where(deleg2);
這樣寫有比較清楚為什麼Where(fruit => fruit.Length < 6)
----------------------------------------------------------
這次改成Linq
IEnumerable<string> query = from fruit in fruits
where fruit.Length < 6
select fruit;
其實編譯器還是會依照規則改成上面 Where的寫法。
看的霧煞煞的話,那我就去睡了,再見!
No comments:
Post a Comment