Начиная с объекта TypeInfo
, который представляет общий тип, я хочу получить TypeInfo
s для каждого параметра типа общего типа. Я хотел бы, чтобы выставить это как метод расширения с этой подписью:Roslyn - Get TypeInfo параметра типа в другом TypeInfo
public static TypeInfo[] GetTypeParameterInfos(this TypeInfo genericType) {
//Do stuff
}
Если я прохожу в TypeInfo
, представляющий List<int>
, он должен возвращать массив, содержащий 1 TypeInfo
представляющий int
. Если я переведу TypeInfo
, представляющий Dictionary<int, string>
, он должен вернуть массив с int
и string
TypeInfo
.
Возможно ли это? Как?
Update/Решение:
Чтобы уточнить, я спрашивал о Microsoft.CodeAnalysis.TypeInfo
, а не System.Reflection.TypeInfo
. Эта путаница названий была реальной проблемой для получения значимых результатов Google. Тем не менее, похоже, что я действительно хочу Microsoft.CodeAnalysis.ITypeSymbol
, который можно легко приобрести у Roslyn TypeInfo
с собственностью TypeInfo.Type
.
Решение находится в свойстве INamedTypeSymbol.TypeArguments
, которое возвращает ImmutableArray<ITypeSymbol>
, соответствующее аргументам типа данного символа типа.
TypeInfo myGenericType = GetTypeInfoSomehow();
ImmutableArray<ITypeSymbol> typeArguments = myGenericType.Type.TypeArguments;
Вы имеете в виду Roslyn 'ITypeSymbol' или Reflection' TypeInfo'? Они не имеют ничего общего с друг друга. – SLaks
Я имею в виду Roslyn 'Microsoft.CodeAnalysis.TypeInfo', а не' System.Reflection.TypeInfo'. У Roslyn также есть интерфейс 'ITypeSymbol', который можно получить из' Microsoft.CodeAnalysis.TypeInfo', поэтому я могу использовать решение, основанное на 'ITypeSymbol'. – JamesFaix
Я продолжаю работать в результатах поиска 'System.Reflection.TypeInfo'. – JamesFaix