如何将列表<x>转换为List <y> </y> </x>

时间:2014-05-08 05:04:56

标签: c# c#-4.0

我有两个课程,如下所示,我需要投射list<child> to list<BM>

 public class Child
{


    [JsonProperty("name")]
    public string title { get; set; }
    public string type { get; set; }
    public string url { get; set; }
    public List<Child> children { get; set; }
}


 public class BM
{

    public string title { get; set; }
    public string type { get; set; }
    public string url { get; set; }
    public List<BM> children { get; set; }


}

3 个答案:

答案 0 :(得分:4)

你不能施展它。您可以创建新列表,其中所有项目都从一个类转换为另一个类,但您不能一次转换整个列表。

您应该创建一个方法,将Child转换为BM实例:

public static BM ToBM(Child source)
{
    return new BN() {
        title = source.title,
        type = source.type,
        url = source.url,
        children = source.children.Select(x => ToBM(x)).ToList()
    };
}

然后使用LINQ转换整个列表:

var BMs = source.Select(x => ToBM(x)).ToList();

答案 1 :(得分:2)

使用automapper的DLL。您可以在http://automapper.codeplex.com/wikipage?title=Lists%20and%20Arrays

了解有关automapper的更多信息
List<BM> BMList= 
    Mapper.Map<List<Child>, List<BM>>(childList);
之前已经问过同样的问题 Automapper copy List to List

答案 2 :(得分:1)

如果您想在自定义类型之间进行转换,也可以使用自定义类型转换

Class2 class2Instance = (Class2)class1Instance;

所以你需要的是在你的child类中定义显式或隐式转换函数

// Add it into your Child class
public static explicit operator BM(Child obj)
{
    BM output = new BM()
    {
          title = obj.title,
          type = obj.type,
          url = obj.url,
          children = obj.children.Select(x => BM(x)).ToList()
    };
    return output;
}

然后:

var result = source.Select(x => (BM)x).ToList();