Я пишу анализатор кода с 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>
... Я мог проверить имя и пространство имен, но это непрактично, потому что я должен проверять каждый "уровень" пространства имен.
Есть ли рекомендуемый способ сделать это?