[ASP.NET]用ConvertAll 泛型方法來進行Array或List轉型

[ASP.NET]用ConvertAll 泛型方法來進行Array或List轉型

今天無意間發現ConvertAll這個語法小技巧,覺得蠻實用的,研究了一下趕緊記錄下來,首先先來看看MSDN的解釋

image

簡單來講,這個語法可以將Array或者是List<object>來進行轉型,廢話不多說,以下寫了兩個簡單範例來分享

List<int> -> List<string>

此範例我們將一個INT List轉換成String List,在以往可能不會想很多就直接用foreach去丟,現在用此語法只要一行就可以解決,而TransTostring是用來進行轉換的function,如果有其他轉換需求,就可寫在此function裡面。

image

List<object> –> List<object>

來搞點複雜一點的,此範例我們用計算BMI值來Demo,首先先建一個BMI的class,裡面包含身高體重和BMI值,接著新增兩筆身高體重資料,再用ComvertAll去計算BMI值,我這邊直接把計算結果丟回原本的List,當然你也可以New一個List<double>來儲存資料,只要修改成new<Converter<BmiModel,double>即可,如此就不用迴圈去處理計算了,程式碼也比較簡潔一點。

image

執行結果,寫完文章才發現BMI值怪怪的,原來是我公式抄錯了,不管了那不是重點 囧

image

感謝91前輩提醒,使用這語法還是要看情況:

Select + Func<> 應該就能解決這問題了。差異是丟出來的 IEnumerable<TResult> 是新的集合,不是舊的集合,Converter 通常是拿來做型別轉換,比較少轉同一個型別。把 BMI 公式直接封在 BMI property 的 get() 中,設計會更簡潔,需要用的時候再取就好。

image

image

--

Reference

http://msdn.microsoft.com/zh-tw/library/73fe8cwf(v=vs.80).aspx