我得到一个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。
- 感谢
答案 0 :(得分:4)
您可以使用反射调用Cast&lt;&gt;使用运行时类型。请参阅此答案:How to call a generic method through reflection
然而,在某些时候,如果您想要在没有反射的情况下操纵它,您仍然必须在编译时知道项目的类型。只是将一个IEnumerable<T>
实例强制转换为一个对象/ IEnumerable仍然不会比仅仅拥有IEnumerable更好。您可能需要重新考虑自己正在做的事情。