在Roslyn分析器中检查表达式类型的正确方法?
我正在用Roslyn编写代码分析器,我需要检查ExpressionSyntax
是否为Task
或Task
。
到目前为止我有这个:
private static bool IsTask(ExpressionSyntax expression, SyntaxNodeAnalysisContext context) { var type = context.SemanticModel.GetTypeInfo(expression).Type; if (type == null) return false; if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName("System.Threading.Tasks.Task"))) return true; if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName("System.Threading.Tasks.Task`1"))) return true; return false; }
它适用于Task
,但不适用于Task
或Task
…我可以检查名称和命名空间,但这是不切实际的,因为我必须检查命名空间的每个“级别”。
有推荐的方法吗?
检查类型是否为generics类型 ,如果是,则使用OriginalDefinition
返回未构造的generics类型。