車輪の再発明の代わりに、Linqを使用できます。
List<string> list = new List<string>();
list.Add("first");
list.Add("second");
List<ListItem> items = list.Select(s => new ListItem() {Id = s.Length, Text = s.ToLower()}).ToList();
// or if ListItem has a constructor with parameters
List<ListItem> items = list.Select(s => new ListItem(s.Length, s.ToLower()).ToList();
あなたが本当に拡張を主張するなら、あなたは上記のロジックを拡張メソッドにラップすることができます、しかし私は要点を理解していません:
List<ListItem> items = list.ToItemList(s => s.Length, s => s.ToLower());
static class Helper
{
public static List<ListItem> ToItemList<T>(this IList<T> list, Func<T, int> idFunc, Func<T,string> textFunc)
{
return list.Select(s => new ListItem() { Id = idFunc(s), Text = textFunc(s) }).ToList();
}
}
どちらを選択する場合でも、プロパティを名前で指定するメソッドを記述しないでください。プロパティの名前を変更すると、メソッドの呼び出しで名前を更新するのを忘れたことをコンパイラが表示できなくなります。これは、プロパティが単なる文字列であるためです。