2010-08-03 68 views
1

此代码应将listType2s(列表)列表转换为type1s列表。我觉得功能有点难以确定。用于转换通用列表的代码清晰度?

我期待看到更易于阅读,简洁且简洁的替代方法。

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

回答

5

我大体上同意使用LINQ对这样的事情 - 但List<T>已自.NET 2.0 ConvertAll方法,实际上是略微更有效的(因为它已经知道大小):

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

我会可能使用LINQ自己未减少我有一个特别的原因不,因为那样它就可能与使用LINQ的其他代码一致。

+0

我认为这是最清晰和最有效的。 – 2010-08-03 21:20:44

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其他不可告人的目的,如果我想。

+0

+1:开溜!你输入的速度比我快。 – kbrimington 2010-08-03 20:47:03

+0

@Randiolpho我认为这段代码显示了linq方法最清晰的意图,但不像使用内置方法那样清晰。再次感谢! – 2010-08-03 21:22:11

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

我觉得最明显的方法是以下

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

+1因为我也使用'x'。 – AMissico 2010-08-03 20:48:23

0

如果是向上转型,这是一个清晰,简明的成语:

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