Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取泛型方法中的属性类型_C#_Generics_Generic Method - Fatal编程技术网

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不是一个类型,而是一个方法。这是行不通的。您需要构造一个带有反射的泛型方法并调用它。对不起,出于某种原因,我将其作为类型来阅读。更新了答案。