【发布时间】:2022-02-22 00:52:07
【问题描述】:
我正在用 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;
}
它适用于Task,但不适用于Task<int> 或Task<string>...我可以检查名称和命名空间,但这不切实际,因为我必须检查命名空间的每个“级别”。
有推荐的方法吗?
【问题讨论】:
-
我有几乎相同的问题,但更笼统地说:如何检查表达式是否匹配任何给定的类型,而不是像这个问题中的特定类型。 See my answer 此处提供完整代码示例
标签: c# .net code-analysis roslyn