如何获取类型的类名

6

我需要使用类似以下方法:

DoSomething<(T)>();

但我不知道我有哪种类型,只有Type类的对象。如果我只有这个,我该如何调用这个方法:

Type typeOfGeneric;

1
你的问题不是很清楚。你能给一个更具体的例子吗? - Jon Skeet
我们需要比这更多的细节……也许一个或两个代码示例会有帮助。 - Justin Niessner
@Jon Skeet,你不能既编辑一个人的帖子以你认为的方式澄清它,又抱怨这个帖子不清楚... :-) - M.A. Hanin
2个回答

3
您可以使用反射(假设 DoSomething() 是静态的):
var methodInfo = typeOfGeneric.GetMethod( "DoSomething" );
methodInfo.Invoke( null, null );

编辑:当我回答时,您的问题已经发生了变化。上面的代码是非泛型方法的,这里是泛型类的:

var constructedType = someType.MakeGenericMethod( typeOfGeneric );
var methodInfo = constructedType.GetMethod( "DoSomething" );
methodInfo.Invoke( null, null );

这是一个非泛型类上的静态泛型方法:

var typeOfClass = typeof(ClassWithGenericStaticMethod);

MethodInfo methodInfo = typeOfClass.GetMethod("DoSomething",   
    System.Reflection.BindingFlags.Static | BindingFlags.Public);

MethodInfo genericMethodInfo = 
    methodInfo.MakeGenericMethod(new Type[] { typeOfGeneric });

genericMethodInfo.Invoke(null, new object[] { "hello" });

我觉得你没有理解我的问题。如何将 Type 对象作为通用参数传递? - wassertim

1
如果您只有一个指定为Type的类型,那么您必须构建通用方法,并通过反射调用它。
Type thisType = this.GetType(); // Get your current class type
MethodInfo doSomethingInfo = thisType.GetMethod("DoSomething");

MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(typeOfGeneric);
concreteDoSomething.Invoke(this, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接