【发布时间】:2022-01-23 02:54:35
【问题描述】:
在我的 .NET 6 Standalone Code Analysis Tool 中,我有一个 Compilation 实例、一个 SemanticModel 实例和一个 ClassDeclarationSyntax 实例。
我需要知道该类是否实现了特定接口 (MediatR.IRequest<TRequest, TResponse>)
我可以使用字符串匹配来做到这一点,但我不喜欢这样,有没有更好的方法?
private static async Task AnalyzeClassAsync(Compilation compilation, SemanticModel model, ClassDeclarationSyntax @class)
{
var baseTypeModel = compilation.GetSemanticModel(@class.SyntaxTree);
foreach (var baseType in @class.BaseList.Types)
{
SymbolInfo symbolInfo = model.GetSymbolInfo(baseType.Type);
var originalSymbolDefinition = (INamedTypeSymbol)symbolInfo.Symbol.OriginalDefinition;
if (!originalSymbolDefinition.IsGenericType)
return;
if (originalSymbolDefinition.TypeParameters.Length != 2)
return;
if (originalSymbolDefinition.ToDisplayString() != "MediatR.IRequestHandler<TRequest, TResponse>")
return;
// Do other stuff here
}
}
【问题讨论】: