如何查看一个类是否已经实现了与Roslyn的接口

时间:2016-06-22 11:02:33

标签: c# roslyn roslyn-code-analysis

我仍然是Roslyn的新人,所以希望这不是一个愚蠢的问题。

我正在寻找一种方法来查看如果一个类已经实现了接口的所有方法,如果没有,则突出显示接口,就像内置的“实现接口”一样确实

到目前为止,我可以看到方法名称是否已实现,但我还没有找到方法来查看是否在方法上设置了正确的返回类型。

1 个答案:

答案 0 :(得分:5)

您可以将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;