[英]How to check if method parameter type/return type is generic, in Roslyn?
如标题中所述,我想检查方法参数是否通用+方法的返回类型是否通用。
例如:
public ISet<string> Collect(MethodDeclarationSyntax method, SemanticModel semanticModel)
{
return method
.ParameterList
.Parameters
.Select(x => x.Type.ToString())
.ToImmutableHashSet();
}
在这里,我想返回method
变量的所有类型的参数,这些类型不是通用的,但是我在API中找不到任何内容来过滤结果。
检查方法的返回类型是否通用时,我有同样的问题。
这取决于您必须使用什么。 如果您具有ArgumentListSyntax
,因此有零个或多个ArgumentSyntax
es( 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);
GenericNameSyntax
转换为GenericNameSyntax
以获取有关泛型(如类型GenericNameSyntax
更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.