【发布时间】:2010-02-28 00:17:52
【问题描述】:
我写了这个扩展方法:
public static DataTable ToDataTable<T>(this IList<T> list)
{...}
如果使用编译时已知的类型调用它会很好:
DataTable tbl = new List<int>().ToDataTable();
但是如果不知道泛型类型怎么调用呢?
object list = new List<int>();
...
tbl = Extension.ToDataTable((List<object>)list); // won't work
【问题讨论】:
-
你为什么投给
List<object>?你的list是List<int>,转换不会成功。 -
因为他在编译时不知道他有什么类型的列表:他不知道它是
List<int>。他试图通过强制转换为基类来解决它(正如您正确指出的那样,它不起作用,因为List<int>与List<object>不兼容,即使int与object兼容)。
标签: c# generics extension-methods