Получение из динамического запроса в список - PullRequest
1 голос
/ 01 декабря 2011

Мой код работает хорошо, но я хотел бы знать, можете ли вы предложить что-то более производительное, чтобы получить значения из моих динамических элементов управления.

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 Ответ

2 голосов
/ 02 декабря 2011

Нет места для оптимизации, ваш цикл довольно прост и понятен. Одна вещь, которую я хотел бы улучшить - кэширование значения 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...