我对Roslyn还很陌生,所以希望这不是一个太蠢的问题。
我想要找到一种方法来查看一个类是否已经实现了接口的所有方法,如果没有实现,则像内置的“实现接口”一样突出显示该接口。
目前,我可以查看方法名称是否已实现,但我还没有找到一种方法来查看方法是否设置了正确的返回类型。
我对Roslyn还很陌生,所以希望这不是一个太蠢的问题。
我想要找到一种方法来查看一个类是否已经实现了接口的所有方法,如果没有实现,则像内置的“实现接口”一样突出显示该接口。
目前,我可以查看方法名称是否已实现,但我还没有找到一种方法来查看方法是否设置了正确的返回类型。
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;
if (!memberFound){}
中收集interfaceMember
。所以,你需要用notFound.Add(interfaceMember)
替换return false
,用return !notFound.Any()
替换return true;
。在返回之前,你可以对notFound
集合做任何你想做的事情。 - Tamas