2010-10-17 65 views
0

尽可能短,我有:方药:一个集合复制到另一个(成员重新映射)

class X 
{ 
    int p1; 
    int p2; 
    int p3; 
    string p4; 
} 
class Y 
{ 
    int a1; 
    int a2; 
    string a3; 
    string a4; 
} 
list<X> XLIST; 
list<Y> YLIST; 

,我想缩短这个:

foreach (X x in XLIST) 
{ 
    Y y=new Y(); 
    // arbitrary conversion 
    y.a1=x.p1; 
    y.a2=x.p2-x.p1; 
    y.a3=x.p3.ToString(); 
    y.a4=x.p4.Trim(); 
    YLIST.Add(y); 
} 
+1

你可以对什么更具体你的意思是“缩短这个”?你的意思是你想在一行中完成该复制ala ICollection.CopyTo? – villecoder 2010-10-17 00:22:31

+0

类似XLIST.Foreach(x => {YLIST.Add(new Y {....})}) – 2010-10-17 00:28:46

回答

3

你要吗?

YLIST = XLIST.Select(x => new Y 
{ 
    a1 = x.p1, 
    a2 = x.p2, 
    a3 = x.p3.ToString(), 
    a4 = x.p4.Trim() 
}).ToList(); 

它使用一个lambda(因为你的标签),它是(非常)略短...

+0

+1,你快一点。 :) – 2010-10-17 00:30:33

+0

@Jeff,哈,是的,我认为是6秒。 ;) – 2010-10-17 00:38:23

2

假设字段是可访问:

List<X> XLIST = ...; 
List<Y> YLIST = XLIST.Select(x => new Y() 
            { 
             a1=x.p1, 
             a2=x.p2-x.p1, 
             a3=x.p3.ToString(), 
             a4=x.p4.Trim(), 
            }) 
        .ToList(); 
相关问题