[英]How to convert a nested List<object> to nested object[] array in C#
如何構建一個函數,利用該函數可以將嵌套列表有效地轉換為嵌套object []數組?
ps嵌套列表的深度不同。
例如:
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)
我只需要做幾行
List<ProductBindingViewSC> productList = new GetProductObject().getProductBySomeCondition( 123 );
var productArray = SomeFunction(productList );
要么
ProductBindingViewSC product = new GetProductObject().getProductById( 345 );
var product = SomeFunction(product );
ProductArray具有與ProductBindingViewSC完全相同的結構,但是所有的List Type都是Array Type。 並且如果List中的對象之一為空,則數組類將在Array中具有一條空對象的記錄。
編輯:問題:我應該如何編寫SomeFunction 。 我只能想到以非常低效的方式進行循環,而我的方法並不是通用的。 我需要一個可以放入任何對象類型的函數。
就個人而言,我只是手動編寫一個將ProductBindingViewSC逐個成員轉換為ProductArray成員的函數,然后使用List.ToArray()+ Array.ConvertAll()或Linq的.Select()。ToArray()。
你也可以使用反射,甚至做出不太慢得益於開放的財產委托和泛型類型實例化(總之, 一切努力避免低迷的GetValue()),自動地從一種類型轉換為其他的,但是這是一個相當長的故事來解釋。
ICopyMember<TIn, TOut>
公開一個復制方法,而不公開成員的類型。 然后在通用類PropertyCopier<Tin, TOut, TPropIn, TPropOut>
中實現此接口,該類使用打開的屬性委托復制成員,並可能稍后對mass-copy函數進行遞歸調用。 TIn
和TOut
,您應該獲得ICopyMember<TIn, TOut>
的集合,每個屬性一個。 Type
作為鍵將它們保存在一個集合中(如果總是將其復制到同一目標類,則僅將源對象的Type
作為鍵)。 productList.ToArray();
順便說一句,List有什么問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.