如何构建单个函数,以便有效地将嵌套List转换为嵌套对象[]数组?
P.S。嵌套列表的深度各不相同。
例如:
public class ProductBindingViewSC
{
public int ProductID { get; set; }
public string aName { get; set; }
public List<Product_SuperType_Info> SuperTypeList { get; set; }
public List<Product_Image_Info> Product_ImageList { get; set; }
public List<Product_Property_BindingViewSC> Property1 { get; set; }
}
Property1的结构类似于ProductBindingViewSC(它有字段和列表)
我只需几行即可完成以下操作
List<ProductBindingViewSC> productList = new GetProductObject().getProductBySomeCondition( 123 );
var productArray = SomeFunction(productList );
或
ProductBindingViewSC product = new GetProductObject().getProductById( 345 );
var product = SomeFunction(product );
ProductArray 具有与 ProductBindingViewSC 完全相同的结构,但所有列表类型都是数组类型。 如果 List 中的某个对象为空,则数组类将在数组中有一条空对象记录。
编辑: 问题:我应该如何编写 SomeFunction 。我只能想到以非常低效的方式循环,而我的不是通用的。我需要一个可以放入任何对象类型的函数。
答案 0 :(得分:0)
个人而言,我只是手动编写一个函数,按成员将ProductBindingViewSC转换为ProductArray成员,然后使用List.ToArray()+ Array.ConvertAll()或Linq&#39; s .Select() .ToArray()。
你也可以使用反射,甚至可以通过打开属性委托和泛型类型实例化(简而言之,任何来避免缓慢的GetValue())使得太慢),自动从一种类型转换为另一种类型,但这是一个很长的故事需要解释。
ICopyMember<TIn, TOut>
以公开复制方法,但不包括成员的类型。然后在泛型类PropertyCopier<Tin, TOut, TPropIn, TPropOut>
中实现此接口,该类使用open属性委托复制成员,稍后可能会对批量复制函数进行递归调用。TIn
和TOut
,您应该获得ICopyMember<TIn, TOut>
的集合,每个属性一个。Type
源和目标对象作为键(或者只是源对象的对象,如果它始终复制到同一目标类),将它们保存在集合中。答案 1 :(得分:-1)
productList.ToArray();
List,btw有什么问题?