2011-11-03 72 views
1

这就是我想要做的事:C# - 在泛型方法使用运行时定义的类型作为参数

PropertyInfo[] propertyInfos = GetProperties(typeofEntity); 
Type t = propertyInfos[0].GetType(); 
IList<t.GetType()> magicalList; 

让我们说是t恰好是类型的Int32,然后我想要列表是

IList<Int32> 

这是不行的,因为它只是一样做

IList<Type> 

我不想写了十几蒙上手动查找类型。

任何想法? 感谢

编辑---------------

我这样做是因为我wanto传递对象没有一个NHibernate的查询,并自动创建相应的规定 - 对象属性的值。

例:

Person{ 
public string Name 
public Phone Phone 
} 

Phone{ 
public int Number 
} 

我希望能够创建一个带有电话的人,并把它传递在NHibernate的查询,使用DetachedFor <>。然后我想自动为Person的'复杂'属性的属性创建标准,比如Phone.Number。

+0

你可以添加一些代码来描述你为什么这样做?可能是一个更优雅的解决方案。 – user7116

回答

3

尝试:

var genericType = typeof (List<>).MakeGenericType(t.GetType()); 
var magicalList = Activator.CreateInstance(genericType); 
4

您只能在编译时使用已知类型的泛型。
在您的代码中,表达式magicalList[0]将不具有编译时类型。

您可以使用非通用的IList或使用反射做所有事情。

1

有方法System.Type.MakeGenericType至极帮助创建泛型类型传递的参数。在你的情况下,你有主要类型:

var oGenericType = typeof (IList<>); 
var oSpecificType = oGenericType.MakeGenericType(typeof(int));