这就是我想要做的事情:
PropertyInfo[] propertyInfos = GetProperties(typeofEntity);
Type t = propertyInfos[0].GetType();
IList<t.GetType()> magicalList;
让我们说t碰巧是Int32类型,然后我希望列表是
IList<Int32>
这不起作用,因为它与执行
相同IList<Type>
我不想写十几个演员来手动找到Type。
任何想法? 感谢
EDIT ---------------
我这样做是因为我想要传递一个没有NHibernate查询的对象,并自动创建对应于对象属性值的标准。
例如:
Person{
public string Name
public Phone Phone
}
Phone{
public int Number
}
我希望能够使用手机创建一个人,并使用DetachedFor&lt;&gt;在nhibernate查询中传递它。然后我想自动为Person的'复杂'属性的属性创建标准,例如Phone.Number。
答案 0 :(得分:4)
您只能在编译时使用已知类型的泛型
在您的代码中,表达式magicalList[0]
将没有编译时类型。
您可以使用非通用IList
或使用反射执行所有操作。
答案 1 :(得分:3)
尝试:
var genericType = typeof (List<>).MakeGenericType(t.GetType());
var magicalList = Activator.CreateInstance(genericType);
答案 2 :(得分:1)
方法System.Type.MakeGenericType有助于创建传递参数的泛型类型。在您的情况下,您有主要类型:
var oGenericType = typeof (IList<>);
var oSpecificType = oGenericType.MakeGenericType(typeof(int));