C# 如何将嵌套对象从一种类型转换为另一种类型
我有一个C#对象,其结构如下C# 如何将嵌套对象从一种类型转换为另一种类型,c#,linq,lambda,mapping,C#,Linq,Lambda,Mapping,我有一个C#对象,其结构如下 class Source { public int Id {get; set;} public List<Source> Children {get; set;} } 是否有一种方法可以使用LINQ来实现这一点,或者我必须遍历所有对象并映射它。您可以这样做: List<A> alist = new List<A>(); List<B> blist = alist.Select(a =
class Source
{
public int Id {get; set;}
public List<Source> Children {get; set;}
}
是否有一种方法可以使用LINQ来实现这一点,或者我必须遍历所有对象并映射它。您可以这样做:
List<A> alist = new List<A>();
List<B> blist = alist.Select(a => new B()).ToList();
public class A
{}
public class B
{}
List alist=newlist();
List blist=alist.Select(a=>newb()).ToList();
公共A类
{}
公共B级
{}
您可以执行如下递归操作:
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
};
}
}
公共类源代码
{
公共int Id{get;set;}
公共列表子项{get;set;}
公共目的地GetDestination()
{
返回新目的地
{
节点=子节点。选择(c=>c.GetDestination()).ToList(),
key=Id
};
}
}
可以尝试向接受源作为参数的目标类添加构造函数:
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();
}
}
这可能会永远运行,可能还没有尝试过。您可以只做一个
选择和一个列表
并在初始值设定项中设置它,而不是ForEach
。这将是一种更为灵巧的方法。但最重要的是递归,你不需要重新建立一个列表。只需将ToList
的返回设置为节点,它就会工作。感谢k4rlsson和@juharr的帮助。
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();