Roslyn ile bir kod analizcisi yazıyorum ve bir ExpressionSyntax
Task
veya Task<T>
tipinin olup olmadığını kontrol etmem gerekiyor.Roslyn analizöründe bir ifadenin türünü kontrol etmek için doğru yolu?
Şimdiye kadar bu var:
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;
}
O Task
için çalışır, ama ben her "seviyesini kontrol etmek zorunda çünkü değil Task<int>
veya Task<string>
için ... Ben adı ve ad alanı kontrol edebilir, ama bu pratik var "ad alanının.
Bunu yapmanın önerilen bir yolu var mı?
Neredeyse aynı soruna sahiptim, ancak daha genel olarak: Bir İfadenin belirli bir türle eşleşip eşleşmediğini kontrol etme, bu sorudaki gibi değil. [Benim cevabımı gör] (http://stackoverflow.com/a/33994426/3568661) Burada tam kod örneği ile –