从动态请求到列表

时间:2011-12-01 19:58:30

标签: linq c#-4.0

我的代码工作正常,但我想知道你是否可以建议更具性能的东西来获取动态控件的值。

public class Obj
{
    public int ID { get; set; }
    public int Quantity { get; set; }

    public List<int> getValues (List<Obj> myList)
    {
        List<Obj> listQuatity = new List<Obj>();
        foreach (Obj item in myList)
        {
            listQuatity.Add(new Obj
                        { 
                          ID = item.ID,
                          Quantity = Request.Params["codControl" + item.ID].Trim().Equals("") 
                             ? 0 
                             : Convert.ToInt32(Request.Params["codControl" + item.ID])
                        });
        }
    }
}

1 个答案:

答案 0 :(得分:2)

没有太多优化空间,您的循环非常简单明了。 我会改进一件事 - 缓存Request.Param值而不是两次访问它:

(这可以使用LINQ重写,所以看起来会更优雅,但不会更快)

public List<int> getValues(List<Obj> myList)
{
    List<Obj> listQuatity = new List<Obj>();
    foreach (Obj item in myList)
    {
        // access it once so code would be slightly faster
        // but much clear
        var requestParam = Request.Params["codControl" + item.ID].Trim();
        listQuatity.Add(new Obj
            {
                ID = item.ID,
                Quantity = requestParam.Equals(String.Empty)
                       ? 0
                       : Convert.ToInt32(requestParam)
            });
    }
}

让我们看看LINQ查询的外观:

List<Obj> listQuatity =
myList.Select(i => new {
                Id = i.ID,
                Param = Request.Params["codControl" + item.ID].Trim(),
             })
      .Select(i => new Obj { 
                ID = i.Id,
                Quantity = Param.Equals(String.Empty)
                           ? 0 
                           : Convert.ToInt32(i.Param) 
            })
     .ToList();