LINQ来了,先忘记foreach

 
1 引言

今天,Terry点敲了我对于一段代码的处理,诚如本文标题所言,事件缘起于我对一个List<T>转换的小小处理。首先来看看,这个List<T>转换双方的本来面目,以一个常见的User类为例而言,User类代表了Model层的实体类,其定义为:

    // Release : code10, 2008/10/06                
    // Author  : Anytao, http://www.anytao.com
    public class User
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public int Age { get; set; }
    }

而Account类,则代码了Business Object层的业务类,其定义为:

    // Release : code10, 2008/10/06                
    // Author  : Anytao, http://www.anytao.com
    public class Account
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

那么一件重要的事情,就是如何完成二者之间的转换,尤其是,类似于List<User>到List<Account>这样的转换,是常常发生在业务处理的实际操作中。关于二者的区别,属于设计方面的论题,不是本文关注的对象。

2 本来的实现---想起来就是foreach

好了,典型的List<T>转换,我们固有思维中想到的就是循环了,所以我想都没想就实现了下面的处理过程:

        // Release : code10, 2008/10/06                
        // Author  : Anytao, http://www.anytao.com
        public List<Account> GetAccounts(List<User> users)
        {
            List<Account> accounts = new List<Account>();
 
            foreach (User item in users)
            {
                Account account = new Account();
                account.ID = item.ID;
                account.Name = item.FirstName + item.SecondName;
                account.Age = item.Age;
 
                accounts.Add(account);
            }
 
            return accounts;
        }

固有的思维并没有错,程序和处理诚如以往一样值得回味。但是,忘却和前进同样重要,所以我忘了用最简单的办法来更优雅的处理这一操作。

3 改进的方式---LINQ真的来了

LIQN来了,就不要吝啬自己的武器,对于相同的代码需求,优雅和简洁永远是值得追求的感觉,所以值得看似经典的代码,其实还可以更好:

        // Release : code10, 2008/10/06                
        // Author  : Anytao, http://www.anytao.com
        public List<Account> GetAccounts(List<User> users)
        {
            var result = from item in users
                         select new Account
                         {
                             ID = item.ID,
                             Name = item.FirstName + item.SecondName,
                             Age = item.Age
                         };
 
            return result.ToList<Account>();
        }

改善就这么一点点,以LINQ方式实现的“智能”转换,看起来更美,不是吗。

4 结论

LINQ已经来了,你还等什么。是的,进步只有一点点,作为开发故事中的小小一笔,但是我觉得值得书写。当然,这只是LINQ应用的小小示例,同时foreach作为最重要的循环手段,仍然有着不可替代的作用,不容忽视。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值