Roslyn - 使用 FindImplementationForInterfaceMember 找不到接口成员

Roslyn - Interface member not found using FindImplementationForInterfaceMember

请问为什么用'FindImplementationForInterfaceMember()'方法找不到classA中M1的接口实现?

所有变量都有一个符号的引用,除了 'am1' 是 null。

            string source = @"
namespace Lib
{
    public interface IA<T>
    {
        void M1();
    }

    public class A<T> : IA<T>
    {
        public void M1() { }
    }
}
";
        var compilation = CSharpCompilation.Create("MyCompilation")
            .AddSyntaxTrees(CSharpSyntaxTree.ParseText(source));

        var global = compilation.GlobalNamespace;
        var lib = global.GetMembers("Lib").OfType<INamespaceSymbol>().Single();
        var ia = lib.GetTypeMembers("IA").OfType<ITypeSymbol>().Single();
        var a = lib.GetTypeMembers("A").OfType<ITypeSymbol>().Single();

        var iam1 = ia.GetMembers("M1").OfType<IMethodSymbol>().Single();
        var am1 = a.FindImplementationForInterfaceMember(iam1);

ia(因此它的成员 am1)是一个 open(或未构造的)泛型类型,没有指定类型参数。

类(及其方法)实现 closed(构造的)泛型类型,它为类型参数指定特定类型。

因此,FindImplementationForInterfaceMember() 只能 return 如果你在一个封闭的接口上传递一个方法的话。

在您的特定情况下,您需要通过指定 class' 类型参数来构造一个封闭接口(因为 class 使用其自己的 T 实现 IA<T> ).如果您的 class 实现方式不同(例如,: IA<List<T>>),它会更加复杂。