Tho*_*que 12 .net c# code-analysis roslyn
我正在编写一个带有Roslyn的代码分析器,我需要检查它是否ExpressionSyntax是类型Task或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;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理为Task,但不适合Task<int>或Task<string>...我可以核对姓名和命名空间,但它是不切实际的,因为我要检查每个命名空间的"级别".
有推荐的方法吗?
检查类型是否为泛型类型,如果是,则用于OriginalDefinition返回未构造的泛型类型.