2011-11-04 159 views
2

我有兩個數據類型:如何將List <SomeType>轉換爲列表<AnotherType>?

class MyDataType { 
    public int Id; 
    private int Field; 
    public String AnotherFieldOrProperty; 
    // + there are some methods 
} 

class MyDataTypeDescriptor { 
    public int Id; 
    public String Description; 
} 

我需要轉換List<MyDataType>List<MyDataTypeDescriptor>這樣一種方式: MyDataTypeDescriptor.Id = MyDataType.Id MyDataTypeDescriptor.Description = MyDataType.ToString();

我想C#可以在一行代碼中非常簡單快速地完成,但是我不知道如何,因爲我不熟悉這種高級技術。請有人幫助我嗎?

感謝

回答

4

這應該這樣做(其中myDataTypes是你List<MyDataType>):

List<MyDataTypeDescriptor> myDataTypeDescriptors = 
    myDataTypes.Select(x => new MyDataTypeDescriptor 
           { 
             Id = x.Id, 
             Description = x.ToString() 
           }).ToList(); 
0
(from i in list1 
select new MyDataTypeDescriptor { Id = i.Id, Description = i.ToString()).ToList(); 
0

可以使用automapper爲你自動的做,如果你不想寫迭代器自己..

0

您可以通過使用LINQ Select方法:

List<MyDataType> list; 
// Process list... 
List<MyDataTypeDescriptor> result = 
    list.Select(x => new MyDataTypeDescriptor() { Id = x.Id, Description = x.ToString() }). 
     ToList<MyDataTypeDescriptor>(); 

或者,如果你有MyDataTypeDescriptor一個構造函數的IdDescription

List<MyDataType> list; 
// Process list... 
List<MyDataTypeDescriptor> result = 
    list.Select(x => new MyDataTypeDescriptor(x.Id, x.ToString())). 
     ToList<MyDataTypeDescriptor>(); 
0

對於簡單的轉換,您可以使用Select方法是這樣的:

List<int> lstA = new List<int>(); 
List<string> lstB = lstA.Select(x => x.ToString()).ToList(); 

對於更具競爭力的轉換,您的ConvertAll功能,如下所示:

List<int> lstA = new List<int>(); 
List<string> lstB = lstA.ConvertAll<string>(new Converter<int, string>(StringToInt)); 

public static string StringToInt(int value) 
{ 
    return value.ToString(); 
} 
0

你可以用LINQ做到這一點:

var listofMyDataTypeDescriptor = (from m in listOfMyDataType 
           select new MyDataTypeDescriptor() 
           { 
            Id = m.Id, 
            Description = m.ToString() 
           }).ToList(); 
0

你不能真正轉化他們,你必須通過收集迭代和每個數據類型

var result = (from MyDataType m in listOfMyDataType select new MyDataTypeDescriptor 
{ 
    Id = m.Id, 
    Description = m.toString(), 
}).ToList(); 
0
創建一個新的描述符

只需添加一條路

定義明確的用戶類型轉換 MSDN

然後做

var newlist = MyDataTypleList.Cast<MyDataTypeDescriptor>().ToList(); 
相關問題