List<string> listString = new List<string>(); listString.Add("abc"); listString.Add("456"); listString.Add("bbb"); listString.Add("iiiiiiii"); var retList = listString.Where(u => u.Length > 4); foreach (string str in retList) { Console.WriteLine("str = {0}", str); }
之前當看到c#里有Where的時候,總是不明覺厲,也影響了閱讀代碼的流暢性。
這里的Where是Linq的一種查詢語法,而u => u.Length > 4則是一個lambda正則表達式。
Where語法格式:
public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate )
lambda正則表達式:
表達式位於=>運算符的右側 (input parameters)=>expression。實際上是一個匿名委托。比如:
delegate int add(int i); static void Main(string[] args) { add myDelegate = x => x + 5; int ret = myDelegate(5); Console.WriteLine("ret = {0}", ret); Console.ReadLine(); }
文章開頭代碼中listString.Where(u => u.Length > 4);里面的u => u.Length > 4實際上就是一個匿名委托,用這個匿名委托去過濾Source里面的每一個元素,剩下的返回IEnumerable<TSource>。