내가 Roslyn과 코드 분석기를 쓰고있어 ExpressionSyntax
이 Task
또는 Task<T>
유형인지 확인해야합니다.Roslyn 분석기에서 표현식의 유형을 확인하는 올바른 방법은 무엇입니까?
지금까지 나는이 있습니다
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>
을 위해 ... 나는 이름과 네임 스페이스를 확인할 수 있습니다,하지만 그것은 비현실적이다 "네임 스페이스의.
권장되는 방법은 없나요?
필자는 거의 같은 질문을했지만 더 일반적으로 표현식이이 질문과 같은 특정 유형이 아닌 특정 유형과 일치하는지 확인하는 방법입니다. [내 답변보기] (http://stackoverflow.com/a/33994426/3568661) 전체 코드 샘플은 여기 –