[英]how to convert List<SomeType> to List<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#只需一行代碼就能非常輕松,快速地做到這一點,但是我不知道怎么做,因為我不熟悉這種高級技術。 有人可以幫我嗎?
謝謝
應該這樣做(其中myDataTypes
是您的List<MyDataType>
):
List<MyDataTypeDescriptor> myDataTypeDescriptors =
myDataTypes.Select(x => new MyDataTypeDescriptor
{
Id = x.Id,
Description = x.ToString()
}).ToList();
(from i in list1
select new MyDataTypeDescriptor { Id = i.Id, Description = i.ToString()).ToList();
如果您不想自己編寫迭代器,則可以使用automapper為您自動完成。
您可以使用LINQ Select
方法來做到這一點:
List<MyDataType> list;
// Process list...
List<MyDataTypeDescriptor> result =
list.Select(x => new MyDataTypeDescriptor() { Id = x.Id, Description = x.ToString() }).
ToList<MyDataTypeDescriptor>();
或者,如果您有一個MyDataTypeDescriptor
的構造函數,該構造函數MyDataTypeDescriptor
一個Id
和一個Description
:
List<MyDataType> list;
// Process list...
List<MyDataTypeDescriptor> result =
list.Select(x => new MyDataTypeDescriptor(x.Id, x.ToString())).
ToList<MyDataTypeDescriptor>();
對於簡單的轉換,您可以使用Select
方法,如下所示:
List<int> lstA = new List<int>();
List<string> lstB = lstA.Select(x => x.ToString()).ToList();
要進行更多的compex轉換,請使用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();
}
您可以使用LINQ
做到這一點:
var listofMyDataTypeDescriptor = (from m in listOfMyDataType
select new MyDataTypeDescriptor()
{
Id = m.Id,
Description = m.ToString()
}).ToList();
您實際上無法轉換它們,必須遍歷集合並為每個DataType創建一個新的Descriptor
var result = (from MyDataType m in listOfMyDataType select new MyDataTypeDescriptor
{
Id = m.Id,
Description = m.toString(),
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.