2013-01-04 36 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”类型是一个**类**,因为协方差不适用于值类型(结构体,枚举)。 –