刘华
实验室:JS测试器
分类专栏
hadoop2篇
mysql1篇
nginx8篇
java5篇
架构设计3篇
信息安全6篇
前端开发2篇
数据同步6篇
AI7篇
其他9篇

编程札记

liuhua-2018/11/7 19:36:16

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的实现类进行快速编程,实现灵活强大的处理逻辑。


小钉 京ICP备16032583号-1