gpt4 book ai didi

c# - Roslyn - 在另一个 TypeInfo 中获取类型参数的 TypeInfo

转载 作者:行者123 更新时间:2023-11-30 15:59:48 24 4
gpt4 key购买 nike

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

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

如果我传入 TypeInfo代表List<int> ,它应该返回一个包含 1 TypeInfo 的数组代表int .如果我传入 TypeInfo代表Dictionary<int, string> , 它应该返回一个数组 int和一个 string TypeInfo .

这可能吗?怎么办?


更新/解决方案:

澄清一下,我问的是 Microsoft.CodeAnalysis.TypeInfo , 不是 System.Reflection.TypeInfo .这种名称混淆一直是获得有意义的谷歌结果的一个真正问题。然而,看起来我真正想要的是 Microsoft.CodeAnalysis.ITypeSymbol ,可以很容易地从 Roslyn 获得 TypeInfoTypeInfo.Type属性(property)。

解决方案在 INamedTypeSymbol.TypeArguments 中属性,返回 ImmutableArray<ITypeSymbol>对应于给定类型符号的类型参数。

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

最佳答案

source可以看出, Roslyn 的 TypeInfoITypeSymbol 的一个非常薄的包装器;这就是您需要寻找有关该类型的任何有用信息的地方。

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

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

关于c# - Roslyn - 在另一个 TypeInfo 中获取类型参数的 TypeInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com