Dato un oggetto MethodDeclarationSyntax come posso trovare il tipo di dichiarazione del metodo?Individuazione del tipo di dichiarazione di un metodo
Il mio problema reale è che ho bisogno di capire se il metodo di riferimento sta implementando un metodo di interfaccia o meno.
Ad esempio, dato il codice soffietto, se ho un MethodDeclarationSyntax per la Dispose metodo(), come si può concludere che è l'implementazione del IDisposable.Dispose()?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
Ho cercato di ottenere il tipo dichiarando del metodo (e controllare il tipo) senza successo (proprietà Parent mi restituisce classe InterfaceImplementation).
Ho anche cercato di afferrare il simbolo semantica per il metodo:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
ma non riuscivo a individuare qualcosa che mi potrebbe aiutare.
Idee?
Vorrei usare l'operatore '==' invece di 'Equals()' qui, perché 'FindImplementationForInterfaceMember()' può restituire 'null'. O almeno scrivi il 'Equals()' al contrario. – svick
@svick: buon punto di scambio degli ordini di Equals. Il mio utilizzo di Equals non è un caso, come un'abitudine importante che abbiamo sviluppato nel team di Roslyn: l'utilizzo di == funzionerà correttamente finché si utilizzano solo i tipi specifici della lingua. Se hai due IMethodSymbols, * devi * usare Equals come == non è sovraccarico in quel caso. –
@Jason Ho paura che questo non mi aiuti poiché presuppone di sapere quali metodi devo controllare (nel codice, prendi un riferimento al simbolo del metodo Dispose() e confrontalo con quello) che non è il caso. Naturalmente posso controllare ricorsivamente la classe base/le interfacce (finché non raggiungo l'oggetto) ma mi aspetto che la classe MethodSymbol possa fornirmi direttamente queste informazioni. – Vagaus