Получить тип кортежа в Roslyn Analyzer - PullRequest
0 голосов
/ 03 марта 2019

Я пишу анализатор Roslyn и столкнулся с необходимостью знать тип кортежа.Я получил TypeInfo, и в отладчике я вижу, что TupleElements свисает с Type, что будет именно тем, что мне нужно.Однако он доступен только для приведения к TupleTypeSymbol

((Microsoft.CodeAnalysis.CSharp.Symbols.TupleTypeSymbol)typeInfo.Type).TupleElements

TupleTypeSymbol недоступен из-за уровня защиты, поэтому приведение невозможно.Есть ли другой способ доступа к информации?

У меня почти такой же вопрос в сценариях, где мой тип является открытым универсальным: есть ли какой-нибудь способ доступа к информации о типе универсальных шаблонов?

1 Ответ

0 голосов
/ 08 марта 2019
  • Для типов кортежей вам просто нужно преобразовать ваш тип в INamedTypeSymbol и взять из него базовый тип кортежа: (type as INamedTypeSymbol)?.TupleUnderlyingType, после чего вы получите обычно ITypeSymbol закрытого универсального типа,и, наконец, просто возьмите аргументы универсального типа: (type as INamedTypeSymbol)?.TupleUnderlyingType.TypeArguments
  • Если вы хотите получить информацию о параметрах открытого универсального типа, например, T1 и T2 в Gen<T1,T2>, вы можете сделатьто же самое: приведите ваш тип к INamedTypeSymbol и возьмите TypeParameters из него, если тип является открытым или закрытым универсальный тип
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...