2013-01-04 30 views
1

確定。我試圖採取List<Product>並將其傳遞到採用通用List<object>並通過循環創建List<dynamic>的方法。該方法需要能夠處理其他對象的列表(即:Item,Customer,Package等)。動態列表的強類型對象列表

這個想法是這樣的,我將有一個動態的通用列表,我可以通過JSON通過線路發送。

我該如何做到這一點?

回答

7

最簡單的方法是使用LINQ建立一個新列表。由於您使用的是.NET 4,你有協提供給你,所以你可以使用:

List<object> foo = products.ToList<object>(); 

甚至只是:

List<object> foo = new List<object>(products); 

您不能通過現有列表,因爲List<Product>只是不是 a List<object>

當然,如果您可以更改您的方法來接受IEnumerable<object>而不是,由於協方差,這將工作正常。如果您僅嘗試從參數集合中讀取讀取,則這可能是可行的。

請注意,您不清楚爲什麼您需要使用反射來創建List<dynamic> - 您的方法實際上在做什麼?爲什麼你就不能使用:

List<dynamic> foo = new List<dynamic>(products); 
+0

如果提問者使用.NET 4.5,還有另一種** **協變接口,['IReadOnlyList '](http://msdn.microsoft.com/en -us/library/hh192385.aspx)以及諸如'List '和'T []'之類的東西來實現它,並且由於協方差,'IReadOnlyList '也是'IReadOnlyList '或'IReadOnlyList '而不復制集合(它只是一個參考轉換)。所有這些都假定「Product」類型是一個**類**,因爲協方差不適用於值類型(結構體,枚舉)。 –