C# 如何运行返回“0”对象的方法;“类型”;来自泛型类

C# 如何运行返回“0”对象的方法;“类型”;来自泛型类,c#,generics,reflection,typeof,C#,Generics,Reflection,Typeof,你能帮我解决一个问题吗。我想初始化并使用这样一个类: public class GenericClass<T> { public static T Method(string xml) { ... } } 公共类GenericClass { 公共静态T方法(字符串xml) { ... } } 我想做的是: public void do(Type _type) { var genObj = new GenericClass<_ty

你能帮我解决一个问题吗。我想初始化并使用这样一个类:

public class GenericClass<T>
{
    public static T Method(string xml)
    {
       ...
    }
}
公共类GenericClass
{
公共静态T方法(字符串xml)
{
...
}
}
我想做的是:

public void do(Type _type)
{
    var genObj = new GenericClass<_type>();  // Error
    var result = genObj.Method("parameter");
}
public void do(类型_类型)
{
var genObj=新的GenericClass();//错误
var结果=genObj.方法(“参数”);
}

我已经找到了初始化GenericClass的方法,但我真的不知道如何运行此实例的方法,该方法返回初始化中使用的类型。

您实际要问的是如何使用反射创建
GenericClass的动态实例。这就是它的工作原理:

var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = Activator.CreateInstance(concreteType); // Calls default constructor.
然后:

var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = (ISomeInterface) Activator.CreateInstance(concreteType); // Calls default constructor.

instance.Method("parameter");
var-genericTypeDefinition=typeof(GenericClass);
var-concreteType=genericTypeDefinition.MakeGenericType(_-type);
变量实例=(ISomeInterface)Activator.CreateInstance(concreteType);//调用默认构造函数。
方法(“参数”);

请注意
MakeGenericType
,它将_type绑定为T,并返回一个类型“包含”具体化的泛型类定义。然后,Activator.CreateInstance完成了这个技巧,对于任何类型。我想接下来的问题可能是,您试图用这个解决方案解决什么问题?我找到了创建泛型类的方法,但我不确定如何运行该方法并从中获得结果。结果的类型应与我用于创建类的类型相同。
\u type
的值仅在运行时已知。类型参数
必须在编译时已知(对于任何具体类型)。所以,你所问的根本不可能,因为它需要在信息可用之前提供信息。嗨。你为什么在这个问题上设置“重复”?您提供的链接所指向的答案无助于解决问题。方法应返回类型为T的结果。这是问题的关键。在您的情况下,它也将是通用接口:T方法(字符串)是的,我想到了。现在改变了。
var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = (ISomeInterface) Activator.CreateInstance(concreteType); // Calls default constructor.

instance.Method("parameter");