从表示泛型类型的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>
答案 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。