简体   繁体   中英

Roslyn - Get TypeInfo of type parameter in another TypeInfo

Starting with a TypeInfo object that represents a generic type, I want to retrieve TypeInfo s for each type parameter of the generic type. I would like to expose this as an extension method with this signature:

public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
    //Do stuff
}

If I pass in a TypeInfo representing List<int> , it should return an array that contains 1 TypeInfo representing int . If I pass in a TypeInfo represnting Dictionary<int, string> , it should return an array with an int and a string TypeInfo .

Is this possible? How?


Update/Solution:

To clarify, I was asking about Microsoft.CodeAnalysis.TypeInfo , not System.Reflection.TypeInfo . This name confusion has been a real problem in getting meaningful Google results. However, it looks like what I really want is Microsoft.CodeAnalysis.ITypeSymbol , which can be easily acquired from a Roslyn TypeInfo with the TypeInfo.Type property.

The solution is in the INamedTypeSymbol.TypeArguments property, which returns an ImmutableArray<ITypeSymbol> corresponding to the type arguments of the given type symbol.

TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;

As you can see from the source , Roslyn's TypeInfo is a very thin wrapper around ITypeSymbol ; that is where you need to look to get anything useful about the type.

If the type is in fact a generic type (as opposed to special types like arrays or pointers), it will actually be an INamedTypeSymbol , which has all the APIs necessary to investigate the type.

In your case, you just want its TypeArguments property .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM