如何将嵌套对象从一种类型转换为另一种类型

4

I have a C# object with structure like

class Source 
{
    public int Id {get; set;}
    public List<Source> Children {get; set;}
}

我想将类型为Source的对象(其Children数量未知)转换为类型为Destination的对象。

class Destination
{
    public int key {get; set;}
    public List<Destination> nodes {get; set;}
}

有没有可以使用LINQ来实现这个功能的方法,还是我必须遍历所有元素并进行映射?

3个回答

4
您可以像这样进行递归操作:

您可以尝试使用递归方法:

public class Source
{
    public int Id { get; set; }
    public List<Source> Children { get; set; }

    public Destination GetDestination()
    {
        return new Destination
        {
            nodes = Children.Select(c => c.GetDestination()).ToList(),
            key = Id
        };
    }
}

1
不必使用 ForEach,只需使用 SelectToList 并在初始化器中设置即可。这将是更符合 Linq 的方式。但重要的部分是递归。 - juharr
1
你不需要新建一个列表。只需将 ToList 的返回值设置为 nodes,它就可以工作了。 - juharr
感谢k4rlsson和@juharr的帮助。 - Garima

0
你可以这样做:
    List<A> alist = new List<A>();
    List<B> blist = alist.Select(a => new B()).ToList();


    public class A
    {}

    public class B
    {}

0
也许尝试在目标类中添加一个构造函数,该构造函数接受源作为参数:
class Destination
{
    public int key {get; set;}
    public List<Destination> nodes {get; set;}

    public Destination(Source source)
    {
        Key = source.Id;
        Nodes = source.Select(s => new Destination(s)).ToList();
    }
}

然后执行:

var destinations = sources.Select(s => new Destination(s)).ToList();

这可能会一直运行下去,我还没有尝试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接