我不了解具有通用参数的成员的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应该用于获取基于编译相关信息的方法,而不是解析通用方法信息。

07-24 17:05