转换通用列表的代码清晰度?

时间:2010-08-03 20:42:18

标签: c# .net linq linq-to-sql

此代码应将listType2s(list)列表转换为type1s列表。我觉得功能有点难以确定。

我希望看到更容易阅读,简洁,简洁的替代方法。

        List<Type1> type1s = new List<Type1>();
        listType2s.ForEach(t => type1s.Add((new Type1(t))));

5 个答案:

答案 0 :(得分:5)

我普遍同意在这种情况下使用LINQ - 但List<T>自.NET 2.0起有一个ConvertAll方法,实际上效率稍高(因为它已经知道大小):

List<Type1> type1s = listType2s.ConvertAll(t => new Type1(t));

我自己可能自己使用LINQ,除非我有一个特殊的理由不这样做,因为那时它与其他可能也会使用LINQ的代码一致。

答案 1 :(得分:4)

我个人喜欢:

var type1s = (from item in listType2s select new Type1(item)).ToList();

我应该说,我实际上更喜欢

var qry = from item in listType2s 
          select new Type1(item);
var type1s = qry.ToList();

但主要是因为如果我愿意,我可以将qry用于其他恶意目的。

答案 2 :(得分:4)

var type1s = listType2s.Select(o => new Type1(o)).ToList();

答案 3 :(得分:3)

我认为最明确的方法是以下

var type1s = listType2s.Select(x => new Type1(x)).ToList();

答案 4 :(得分:0)

如果你正在向上倾斜,这是一个简洁明了的习语:

List<SubType> list1 = GetListSubType();
List<BaseType> list2 = list1.OfType<BaseType>().ToList();