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

时间:2015-01-30 16:20:09

标签: c# .net code-analysis roslyn

我正在使用Roslyn编写代码分析器,我需要检查ExpressionSyntaxTask还是Task<T>

到目前为止,我有这个:

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<int>Task<string> ...我可以检查名称和名称空间,但这不切实际,因为我必须检查每个&#34;电平&#34;命名空间。

有推荐的方法吗?

1 个答案:

答案 0 :(得分:7)

检查类型is a generic type,如果是,请使用OriginalDefinition返回未构造的泛型类型。