我不了解具有通用参数的成员的Module.ResolveMember行为。根据下面的文档代码,应该可以使用,但是出于某种原因,fooMember.DeclaringType不能使用bool类型进行参数化。
class A<T> where T:new()
{
T a;
public void foo()
{
a = new T();
}
}
class B:A<bool>
{ }
class Program
{
static void Main(string[] args)
{
var test = new B();
var aType = test.GetType().BaseType;
var token = aType.GetMember("foo").First().MetadataToken;
var fooMember = aType.Module.ResolveMember(token, aType.GetGenericArguments(), null);
Debug.Assert(aType == fooMember.DeclaringType);
Console.ReadKey();
}
}
为什么不起作用?
最佳答案
事实证明,ResolveMethod(Int32, Type[], Type[])
需要methodref标记,对于泛型方法,对于不同的泛型参数,我们具有不同的methodrefs。 ResolveMethod
应该用于获取基于编译相关信息的方法,而不是解析通用方法信息。