MethodDeclarationSyntaxオブジェクトを指定すると、メソッドの宣言型をどのように見つけることができますか?メソッドの宣言型の検索
私の実際の問題は、参照されたメソッドがインターフェイスメソッドを実装しているかどうかを調べる必要があることです。私は廃棄()方法MethodDeclarationSyntaxを持っている場合、コード蛇腹所与例えば
、どのように)(これは、IDisposable.Disposeの実装であると結論することができますか?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
ノー成功とメソッドの宣言タイプを(とタイプを確認してください)(親プロパティが私にInterfaceImplementationクラスをバック与えます)を取得しようとしました。
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
をが、私を助けることができる何かを見つけることができませんでした:
私はまた、メソッドのセマンティックのシンボルをつかむしようとしています。
アイデア?
'FindImplementationForInterfaceMember()'は 'null'を返すので、ここでは' Equals() 'の代わりに' == '演算子を使います。あるいは、少なくとも 'Equals()'を書いてください。 – svick
@svick:Equalsの順序を入れ替えるのは良い点です。 Roslynチームで開発した重要な習慣であるEqualsの私の使用は、偶然ではありません。==を使用すると、言語固有の型を使用している限り正常に動作します。 2つのIMethodSymbolsがある場合は、その場合に==がオーバーロードされないため、Equalsを使用する必要があります。 –
@Jason私はあなたのコードで、あなたがDispose()メソッドのシンボルへの参照を取得して比較する必要がある方法を知っていると仮定しているので、これは私を助けません。もちろん、基本クラス/インターフェースを再帰的に(オブジェクトに到達するまで)チェックできますが、MethodSymbolクラスがこの情報を直接提供できると思います。 – Vagaus