Roslyn - 在另一个TypeInfo中获取type参数的TypeInfo

时间:2016-12-12 19:33:04

标签: c# roslyn

从表示泛型类型的TypeInfo对象开始,我想为泛型类型的每个类型参数检索TypeInfo。我想将此公开为具有此签名的扩展方法:

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

如果我传入代表TypeInfo的{​​{1}},则应返回包含1 List<int>代表TypeInfo的数组。如果我传入int重复TypeInfo,则应返回包含Dictionary<int, string>int string的数组。

这可能吗?怎么样?

更新/解决方案:

为了澄清,我问的是TypeInfo,而不是Microsoft.CodeAnalysis.TypeInfo。这个名称混淆是获得有意义的Google搜索结果的真正问题。但是,看起来我真正想要的是System.Reflection.TypeInfo,可以从具有Microsoft.CodeAnalysis.ITypeSymbol属性的Roslyn TypeInfo轻松获取。

解决方案位于TypeInfo.Type属性中,该属性返回与给定类型符号的类型参数对应的INamedTypeSymbol.TypeArguments

ImmutableArray<ITypeSymbol>

1 个答案:

答案 0 :(得分:3)

source可以看出,Roslyn的/usr/bin/php /tmp/ide-phpunit.php --bootstrap /home/lchost/EOSS2/tests/bootstrap.php --no-configuration /home/lchost/EOSS2/tests Testing started at 9:02 PM ... PHP Notice: Undefined variable: argv in /tmp/ide-phpunit.php(191) : eval()'d code on line 1 PHP Stack trace: PHP 1. {main}() /tmp/ide-phpunit.php:0 PHP 2. IDE_PHPUnit_Loader::init() /tmp/ide-phpunit.php:250 PHP 3. eval() /tmp/ide-phpunit.php:191 This version of PHPUnit is supported on PHP 5.6, PHP 7.0, and PHP 7.1. You are using PHP 5.5.9-1ubuntu4.20 (/usr/bin/php5). 是一个非常薄的TypeInfo包装器;那就是你需要寻找有关该类型的任何有用的东西。

如果类型实际上是泛型类型(与数组或指针等特殊类型相对),它实际上是INamedTypeSymbol,它具有调查类型所需的所有API。

在您的情况下,您只需要TypeArguments property