给定一个IEnumerable和成员数据类型</t>,创建一个通用IEnumerable <t>

时间:2010-03-31 13:50:42

标签: c# .net generics

我得到一个IEnumerable,我知道它是一个对象数组。我也知道元素的数据类型。现在我需要将其转换为IEnumerable <T&gt;,其中T是提供的类型。例如

IEnumerable results = GetUsers();
Type t = GetType(); //Say this returns User
IEnumerable<T> users = ConvertToTypedIEnumerable(results, t);

我现在想要将其转换/转换为IEnumerable <User&gt;。此外,我希望能够为任何类型执行此操作。

我不能使用IEnumerable.Cast&lt;&gt;,因为为此我必须知道在编译时将其强制转换的类型,这是我没有的。我在运行时获得了类型和IEnumerable。

- 感谢

1 个答案:

答案 0 :(得分:4)

您可以使用反射调用Cast&lt;&gt;使用运行时类型。请参阅此答案:How to call a generic method through reflection

然而,在某些时候,如果您想要在没有反射的情况下操纵它,您仍然必须在编译时知道项目的类型。只是将一个IEnumerable<T>实例强制转换为一个对象/ IEnumerable仍然不会比仅仅拥有IEnumerable更好。您可能需要重新考虑自己正在做的事情。