c# - Roslyn - 是接口(interface)的符号实现吗?

标签 c# roslyn roslyn-code-analysis

是否可以通过 Roslyn 了解 Symbol 是否是接口(interface)中某物的实现?例如IDisposable中的Dispose()

我有一个代表 Dispose() 方法的符号,但据我所知,没有任何属性表明它是由 定义的方法的实现IDisposable 接口(interface)。

最佳答案

当然有可能。

仅针对您的Dispose 示例:

var disposeMethodSymbol = ...
var type = disposeMethodSymbol.ContainingType;
var isInterfaceImplementaton = type.FindImplementationForInterfaceMember(
            type.Interfaces.Single().
            GetMembers().OfType<IMethodSymbol>().Single()) == disposeMethodSymbol ;

但是如果它用于一般用途,则需要更通用地编写它,使用 AllInterfaces 而不是 Interfaces 并且确保不要使用 Single

例子:

public static bool IsInterfaceImplementation(this IMethodSymbol method)
{
    return method.ContainingType.AllInterfaces.SelectMany(@interface => @interface.GetMembers().OfType<IMethodSymbol>()).Any(interfaceMethod => method.ContainingType.FindImplementationForInterfaceMember(interfaceMethod).Equals(method));
}

关于c# - Roslyn - 是接口(interface)的符号实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42074792/

相关文章:

c# - 字符 + 字符 = 整数?为什么?

c# - 如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

C# Lambda 表达式语法 : are brackets necessary?

c# - 获取引用位置的符号

c# - 如何使用 project.json 文件中的依赖项在 Roslyn 中创建 MetadataReferences?

c# - 可靠地将类型符号 (ITypeSymbol) 与 Roslyn 进行比较

c# - 使用 Roslyn 创建命名空间代码重构

c# - 白鲸记的异常(exception)

vb.net - 以编程方式执行重载解析

c# - 如何将 IMethodSymbol 转换为 MethodDeclarationSyntax?