带有Lambda表达式的C#任意嵌套列表变换



我正在尝试对不同类的列表进行一些转换。例如,有A类和B类。

class A
{
private int Data;
public A(int InputData)
{
this.Data = InputData;
}
public int GetData()
{
return this.Data;
}
public B ToB()
{
return new B(this);
}
}
class B
{
private double Data;
public B(A ObjectA)
{
this.Data = Math.Cos(ObjectA.GetData());        //  For example
}
public double GetData()
{
return this.Data;
}
}

那么,ListB1就是ListA1的转换结果。

List<A> ListA1 = new List<A>() { new A(0), new A(1), new A(2) };
List<B> ListB1 = new List<B>();
foreach (var EachItem in ListA1)
{
ListB1.Add(EachItem.ToB());
}

我想知道有没有什么方法可以使用lambda表达式来执行这个例子?可能类似于List<B> ListB1 = ListA1.ConvertAll(ObjectA => { ObjectA.ToB(); });。但是,ConvertAll方法的输入参数似乎是作为Converter对象设计的,而不是lambda表达式。此外,是否有任何简单的方法来处理任意嵌套的列表案例,例如下面的ListA2?我知道ListB2可以由嵌套的foreach循环生成,但我期待着找到一种类似List<List<B>> ListB2 = ListA2.ConvertAll(ObjectA => { ObjectA.ToB(); });的方法。然后,相同的结构可以应用于任意嵌套的列表。

List<List<A>> ListA2 = new List<List<A>>();
ListA2.Add(ListA1);
ListA2.Add(ListA1);
List<List<B>> ListB2 = new List<List<B>>();
foreach (var EachItem1 in ListA2)
{
List<B> temp = new List<B>();
foreach (var EachItem2 in EachItem1)
{
temp.Add(EachItem2.ToB());
}
ListB2.Add(temp);
}

欢迎提出任何建议。

你可以做一些类似的事情

ListA2.ForEach(x => x.ToB()).ToList();

这样你就有了B 的列表

您可以使用Linq的Select来翻译每个项目;

List<B> ListB1 = ListA1.Select(a => a.ToB()).ToList();
List<List<B>> ListB2 = ListA2.Select(a2 => a2.Select(a => a.ToB()).ToList()).ToList();

最新更新