正如标题中所述,我想检查方法参数是否是通用的+如果方法的返回类型是通用的。
例如:
public ISet<string> Collect(MethodDeclarationSyntax method, SemanticModel semanticModel)
{
return method
.ParameterList
.Parameters
.Select(x => x.Type.ToString())
.ToImmutableHashSet();
}
在这里,我想返回method
变量的所有类型的参数,这些参数不是通用的,但我无法在API中找到任何内容来过滤结果。
在检查方法的返回类型是否通用时,我遇到了同样的问题。
答案 0 :(得分:1)
这取决于您必须使用的内容。如果您有ArgumentListSyntax
因此零{或} {es} ArgumentSyntax
,则可以从参数表达式中获取类型信息:
ArgumentListSyntax.Arguments
从那里开始,var type = model.GetTypeInfo(argument.Expression).Type as INamedTypeSymbol;
属性。例如:
IsGenericType
如果您拥有该方法的Debug.Assert(type.IsGenericType);
对象,则可以查看MethodDeclarationSyntax
属性是否属于ReturnType
类型:
GenericNameSyntax
强制转换为Debug.Assert(methodDeclaration.ReturnType is GenericNameSyntax);
以获取有关类型参数等泛型类型的更多信息。