如何查看一个 class 是否实现了与 Roslyn 的接口
How to see if a class has implemented the interface with Roslyn
我在 Roslyn
还是个新手,所以希望这不是一个太愚蠢的问题。
我正在寻找的是一种方法来查看是否 class 已经实现了接口的所有方法,如果没有,则突出显示接口,就像内置的 "Implement interface" 一样。
到目前为止我可以看到方法名是否实现了,但是我还没有找到方法来查看方法上是否设置了正确的返回类型。
您可以使用 ITypeSymbol.FindImplementationForInterfaceMember
来达到这个目的。
基本上您需要的是遍历接口的所有 IMethodSymbol
并检查所讨论的类型是否定义了一个方法,该方法等于上述方法的返回值。
这是草稿:
var interfaceType = ...
var typeInQuestion = ...
foreach(var interfaceMember in interfaceType.GetMembers().OfType<IMethodSymbol>())
{
var memberFound = false;
foreach(var typeMember in typeInQuestion .GetMembers().OfType<IMethodSymbol>())
{
if (typeMember.Equals(typeInQuestion.FindImplementationForInterfaceMember(interfaceMember)))
{
// this member is found
memberFound = true;
break;
}
}
if (!memberFound)
{
return false;
}
}
return true;
我在 Roslyn
还是个新手,所以希望这不是一个太愚蠢的问题。
我正在寻找的是一种方法来查看是否 class 已经实现了接口的所有方法,如果没有,则突出显示接口,就像内置的 "Implement interface" 一样。
到目前为止我可以看到方法名是否实现了,但是我还没有找到方法来查看方法上是否设置了正确的返回类型。
您可以使用 ITypeSymbol.FindImplementationForInterfaceMember
来达到这个目的。
基本上您需要的是遍历接口的所有 IMethodSymbol
并检查所讨论的类型是否定义了一个方法,该方法等于上述方法的返回值。
这是草稿:
var interfaceType = ...
var typeInQuestion = ...
foreach(var interfaceMember in interfaceType.GetMembers().OfType<IMethodSymbol>())
{
var memberFound = false;
foreach(var typeMember in typeInQuestion .GetMembers().OfType<IMethodSymbol>())
{
if (typeMember.Equals(typeInQuestion.FindImplementationForInterfaceMember(interfaceMember)))
{
// this member is found
memberFound = true;
break;
}
}
if (!memberFound)
{
return false;
}
}
return true;