3
我還是Roslyn
的新手,所以希望這不是太愚蠢的問題。如何查看一個班級是否實施了與Roslyn的接口
如果一個類已經實現了接口的所有方法,並且如果不是接口的突出顯示,就像構建在「實現接口」中那樣,我正在尋找的方法是。
到目前爲止,我可以看到方法名是否被實現,但我還沒有找到方法來查看是否在方法上設置了正確的returntype。
我還是Roslyn
的新手,所以希望這不是太愚蠢的問題。如何查看一個班級是否實施了與Roslyn的接口
如果一個類已經實現了接口的所有方法,並且如果不是接口的突出顯示,就像構建在「實現接口」中那樣,我正在尋找的方法是。
到目前爲止,我可以看到方法名是否被實現,但我還沒有找到方法來查看是否在方法上設置了正確的returntype。
您可以使用ITypeSymbol.FindImplementationForInterfaceMember
來實現此目的。
基本上你需要的是通過接口的所有IMethodSymbol
s並檢查所討論的類型是否定義了一個等於上述方法的返回值的方法。
這裏有一個草案:
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;
它的工作原理就像一個魅力。謝謝。如果我可以,只是一個快速跟進問題,有沒有一種簡單的方法來看看它沒有實現? – Joshlo
好的:你應該在'if(!memberFound){}'中收集'interfaceMember's。因此,不是'return false',而是'notFound.Add(interfaceMember)',而不是'return true;',你需要'return!notFound.Any()'。在返回之前,你可以用'notFound'設置來做任何你想做的事情。 – Tamas
非常感謝 – Joshlo