我认为问这个问题比回答这个问题更难。我想用一个例子来问我的问题:你知道我们可以把一个对象绑定到一个DataSource上,这个对象可以是任何类型的。因此,假设我已经将"MyClass“类型的对象绑定到DataSet的DataSource。现在我将这个数据集作为参数发送给另一个DLL中的另一个类,在这个DLL文件中,我想创建一个"MyClass“类型的List<>。因为我无法访问"MyClass“类型,所以我可以使用以下代码来获取DataSource的类型:
_dataSet.DataSource.GetType()但是我不能使用如下代码来创建“MyClass”类型的列表:List<_dataSet.DataSource.GetType()> _list;
在这种情况下我应该怎么做?
发布于 2010-12-07 04:57:22
基本上有两种选择:
List<object>,或者更好地说,我们最接近已知的_dataSet.DataSourceList<T>。在大多数情况下,我个人倾向于选择(1),因为它是:
第二种选择已经在其他答案中详细阐述了。
发布于 2010-12-07 04:55:06
var newtype = typeof (List<>).MakeGenericType(_dataSet.DataSource.GetType());
var _list = Activator.CreateInstance(newtype);发布于 2010-12-07 04:56:10
您可以使用反射动态创建泛型类型:
var listType = typeof(List<>).MakeGenericType(
    new[] { _dataSet.DataSource.GetType() }
);
var ctor = listType.GetConstructor(new Type[] { });
var list = ctor.Invoke(null);请注意,list将被类型化为object。
https://stackoverflow.com/questions/4370802
复制相似问题