在Roslyn分析器中检查表达式类型的正确方法?

我正在用Roslyn编写代码分析器,我需要检查ExpressionSyntax是否为TaskTask

到目前为止我有这个:

 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 ,但不适用于TaskTask …我可以检查名称和命名空间,但这是不切实际的,因为我必须检查命名空间的每个“级别”。

有推荐的方法吗?

检查类型是否为generics类型 ,如果是,则使用OriginalDefinition返回未构造的generics类型。