【问题标题】:How to see if a class has implemented the interface with Roslyn如何查看一个类是否实现了与 Roslyn 的接口
【发布时间】:2016-06-22 11:02:33
【问题描述】:

我还是 Roslyn 的新手,所以希望这不是一个太愚蠢的问题。

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

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

【问题讨论】:

    标签: c# roslyn roslyn-code-analysis


    【解决方案1】:

    您可以为此使用ITypeSymbol.FindImplementationForInterfaceMember

    基本上,您需要通过接口的所有IMethodSymbols 并检查所讨论的类型是否定义了一个等于上述方法返回值的方法。

    这是草稿:

    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;
    

    【讨论】:

    • 它就像一个魅力。谢谢。如果可以的话,只是一个快速跟进的问题,有没有一种简单的方法可以查看它没有实现?
    • 嗯,是的:您应该在if (!memberFound){} 中收集interfaceMembers。因此,您需要notFound.Add(interfaceMember),而不是return false,而不是return true;,您需要return !notFound.Any()。在返回之前,您可以使用 notFound 集做任何您想做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2018-11-16
    • 2012-12-29
    • 2014-09-02
    • 2010-09-21
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多