是否可以通过 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/