C# 获取泛型方法中的属性类型
我有一个方法:C# 获取泛型方法中的属性类型,c#,generics,generic-method,C#,Generics,Generic Method,我有一个方法: static T RandomObject<T> (...) { var tmp = Activator.CreateInstance<T>(); ... foreach (PropertyInfo info in tmp.GetType().GetProperties()){ ... } } 如果类T有对象属性,我也想随机生成它们,所以我要做的是: var t = info.PropertyType; obj = RandomObje
static T RandomObject<T> (...) {
var tmp = Activator.CreateInstance<T>();
...
foreach (PropertyInfo info in tmp.GetType().GetProperties()){
...
}
}
如果类T有对象属性,我也想随机生成它们,所以我要做的是:
var t = info.PropertyType;
obj = RandomObject<t>(...);
然后我得到:
找不到类型或命名空间名称t是否缺少using指令或程序集引用
有什么办法解决这个问题吗?试试:
obj = GetType().GetMethod("RandomObject", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(t).Invoke(null, ...);
泛型实例化的语法要求在编译时知道类型。你需要使用某种形式的反射。反射是一个高级主题,您应该将其留给有经验的程序员。在学习语言时选择一些更简单的方法。好吧,谢谢Mike,但我必须这么做:为什么你假设它有一个空构造函数?RandomObjectdouble,double,int,int'是一个“方法”,但与“类型”类似。RandomObject不是一个类型,而是一个方法。这是行不通的。您需要构造一个带有反射的泛型方法并调用它。对不起,出于某种原因,我将其作为类型来阅读。更新了答案。