【发布时间】:2016-06-22 11:02:33
【问题描述】:
我还是 Roslyn 的新手,所以希望这不是一个太愚蠢的问题。
我正在寻找一种方法来查看一个类是否实现了接口的所有方法,如果没有,则突出显示接口,就像内置的“实现接口”一样会的。
到目前为止,我可以看到方法名称是否实现了,但是我还没有找到方法来查看方法上是否设置了正确的返回类型。
【问题讨论】:
标签: c# roslyn roslyn-code-analysis
我还是 Roslyn 的新手,所以希望这不是一个太愚蠢的问题。
我正在寻找一种方法来查看一个类是否实现了接口的所有方法,如果没有,则突出显示接口,就像内置的“实现接口”一样会的。
到目前为止,我可以看到方法名称是否实现了,但是我还没有找到方法来查看方法上是否设置了正确的返回类型。
【问题讨论】:
标签: c# roslyn roslyn-code-analysis
您可以为此使用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 集做任何您想做的事情。