Dado un objeto MethodDeclarationSyntax, ¿cómo puedo averiguar el tipo de declaración del método?Encontrar el tipo de declaración de un método
Mi problema real es que necesito averiguar si el método al que se hace referencia está implementando un método de interfaz o no.
Por ejemplo, dado el código de abajo, si tengo una MethodDeclarationSyntax para la Desechar ( método), ¿cómo se puede concluir que es la aplicación de la IDisposable.Dispose()?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
He tratado de obtener el tipo de declarar el método (y comprobar el tipo) sin éxito (propiedad Parent me devuelve la clase InterfaceImplementation).
También he tratado de agarrar el símbolo semántica para el método:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
, pero no pudo detectar nada de lo que me podía ayudar.
Ideas?
Usaría el operador '==' en lugar de 'Equals()' aquí, porque 'FindImplementationForInterfaceMember()' puede devolver 'null'. O al menos escriba 'Equals()' al revés. – svick
@svick: buen punto para cambiar el orden Equals. Mi uso de Equals no es por accidente, como un hábito importante que hemos desarrollado en el equipo de Roslyn: el uso de == funcionará bien siempre y cuando solo uses los tipos específicos del idioma. Si tenía dos IMethodSymbols, * debe * usar Equals ya que == no está sobrecargado en ese caso. –
@ Jason Tengo miedo de que esto no me ayude, ya que asume que sé qué métodos debo verificar (en tu código, tomas una referencia al símbolo del método Dispose() y lo comparas), que no es el caso. Por supuesto, puedo verificar la clase base/interfaces recursivamente (hasta que llegue al objeto) pero esperaría que la clase MethodSymbol podría proporcionarme esta información directamente. – Vagaus