如何将List <sometype>转换为List <anothertype>?</anothertype> </sometype>

时间:2011-11-04 15:48:19

标签: c#

我有两种数据类型:

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#可以在一行代码中轻松快速地完成,但我不知道如何因为我不熟悉这些高级技术。有人会帮我吗?

由于

8 个答案:

答案 0 :(得分:4)

这应该这样做(myDataTypesList<MyDataType>):

List<MyDataTypeDescriptor> myDataTypeDescriptors = 
     myDataTypes.Select(x => new MyDataTypeDescriptor 
                                 { 
                                      Id = x.Id, 
                                      Description = x.ToString() 
                                 }).ToList();

答案 1 :(得分:0)

(from i in list1 
 select new MyDataTypeDescriptor { Id = i.Id, Description = i.ToString()).ToList();

答案 2 :(得分:0)

如果您不想自己编写迭代器,可以使用automapper自动执行此操作。

答案 3 :(得分: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>();

答案 4 :(得分:0)

对于简单转换,您可以使用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();
}

答案 5 :(得分:0)

您可以使用LINQ

执行此操作
var listofMyDataTypeDescriptor = (from m in listOfMyDataType
                                 select new MyDataTypeDescriptor()
                                 {
                                     Id = m.Id,
                                     Description = m.ToString()
                                 }).ToList();

答案 6 :(得分:0)

你实际上无法转换它们,你必须遍历集合并为每个DataType创建一个新的Descriptor

var result = (from MyDataType m in listOfMyDataType select new MyDataTypeDescriptor
{
   Id = m.Id,
   Description = m.toString(),
}).ToList();

答案 7 :(得分:0)

只是添加一个方法

定义显式用户类型转换 MSDN

然后做

var newlist = MyDataTypleList.Cast<MyDataTypeDescriptor>().ToList();