C#中的lambda表达式使得编程更加简捷。如要依据一个字符串数组,来创建一个对象数组,现在可以非常简易地实现。以下代码摘自UEditor的图片抓取器CrawlerHander类:
public class CrawlerHandler : Handler { private string[] Sources; private Crawler[] Crawlers; public CrawlerHandler(HttpContext context) : base(context) { } public override void Process() { Sources = Request.Form.GetValues("source[]"); //……检查参数 Crawlers = Sources.Select(x => new Crawler(x, Server).Fetch()).ToArray(); WriteJson(new { state = "SUCCESS", list = Crawlers.Select(x => new { state = x.State, source = x.SourceUrl, url = x.ServerUrl }) }); } }
这里,代码行
Crawlers = Sources.Select(x => new Crawler(x, Server).Fetch()).ToArray();
实现如下功能:
遍历数组Sources中的每个来源url,对每个url创建一个爬虫对象,并调用其Fetch方法,实现抓取,并返回结果对象,成为新的数组。
而代码
list = Crawlers.Select(x => new { state = x.State, source = x.SourceUrl, url = x.ServerUrl })
又依据返回的Crawlers数组,创建了另一个结果数组。
可见,Select语句结合Lambda表达式,可以对数组或其他IEnumerable的实现类进行快速编程,实现灵活强大的处理逻辑。