2011-12-01 56 views
1

我的代碼工作很好,但我想知道你是否可以建議一些更具性能的值來獲取我的動態控制的值。從動態請求到列表

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]) 
         }); 
     } 
    } 
} 
+0

爲什麼這個標籤的linq? – cadrell0

+0

@ cadrell0也許是一個解決方案?由於LINQ是處理列表的最好方法.. –

+0

對象的LINQ不比循環更高效。事實上,大多數情況下,它最終會執行相同的foreach。它看起來更漂亮,更容易維護。聽起來你在回答問題之前已經有了一個答案。儘量不要偏離不同方向的答案。 – cadrell0

回答

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();