簡體   English   中英

如何在Roslyn中檢查方法參數類型/返回類型是否通用?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM