Type hai = Type.GetType("TestStringObject", true);
var obj = (Activator.CreateInstance(hai));
tata = CreateClass<obj>();
我想做类似的事情,但是泛型类没有将obj识别为对象或类型?
我可以这样做吗?
答案 0 :(得分:0)
在您的示例中,当您使用obj
作为对象的实例时,您将其用作类型。泛型类型参数必须是类,而不是实例或类型,并且必须在编译时才能知道。
如果TestStringObject
是项目中的类,则可以将其用作泛型类型参数,如下所示:
tata = CreateClass<TestStringObject>();
如果在编译时不知道类型,可以在运行时创建一个通用方法来匹配未知类型(作为字符串提供),并以这种方式调用泛型方法。在下面的示例中,我将假设有一个名为TestStringObject
的类具有名为CreateClass
的通用方法;您的具体情况可能会有所不同,但这应该可以满足您的需求:
TestStringObject:
namespace Test
{
class TestStringObject
{
public void CreateClass<T>()
{
Console.WriteLine("CreateClass Invoked");
}
}
}
...别处
// Get the type of the unknown type, provided here as a string.
Type type = Type.GetType("Test.TestStringObject", true);
// Create an instance of the unknown type.
object obj = Activator.CreateInstance(type);
// Get a reference to the 'CreateClass' generic method info.
MethodInfo method = type.GetMethod("CreateClass");
// Get a reference to a version of the generic method that accepts the unknown type as a generic type argument.
MethodInfo genericMethod = method.MakeGenericMethod(type);
// Invoke the generic method of the unknown type.
genericMethod.Invoke(obj, new object[] { });
请注意命名空间,在调用GetType
时必须包含该命名空间,因为它需要一个完全限定的名称。