[英]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.