2012-04-11 9 views
7

Uso de Microsoft Roslyn Estoy tratando de determinar si un tipo de devolución de métodos es nulo.
Tengo el control en mi MethodDeclarationSyntax y puedo ver la propiedad llamada "ReturnType", es un tipo predefinido de vacío. ¿Debo verificar realmente el tipo de palabra clave? ¿Hay una mejor manera de hacer esto?Cómo comparar el método ReturnType con los tipos predefinidos

((PredefinedTypeSyntax)methodDec.ReturnType).Keyword.Kind != SyntaxKind.VoidKeyword 

¿Hay algún método recomendado para lograr lo que estoy tratando de hacer?

Respuesta

6

, para void, eso es perfecto, ya que no hay otra manera de decirlo. Diciendo System.Void está explícitamente prohibido allí.

Para otros tipos predefinidos como int, tenga en cuenta que puede escribirlo con la palabra clave o con .NET tipo System.Int32. Dependiendo de su escenario, en realidad podría importar distinguir entre ellos, por lo que la verificación sintáctica seguiría siendo correcta. Si no se preocupan por la diferencia y sólo quiere saber si es un entero, a continuación, debe hacer algo de la unión con una SemanticModel:

var methodSymbol = (MethodSymbol)semanticModel.GetDeclaredSymbol(methodDecl); 
if (methodSymbol.ReturnType.SpecialType == SpecialType.System_Int32) 
{ 
    /* ...whatever goes here */ 
} 

MethodSymbol también tiene una propiedad ReturnsVoid la que le puede resultar útil si por casualidad tener el simbolo para eso

+0

Genial, gracias por la ayuda. – Jay

Cuestiones relacionadas