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>>
),它会更加复杂。
请问为什么用'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>>
),它会更加复杂。