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>。
