c# - 使用反射从 C# 中嵌套类型的 DeclaringType 获取泛型类型
问题描述
假设我有以下类结构:
public class Outer<T>
{
public class Inner<U>
{
}
}
还有一些代码:
var testType = typeof(Outer<string>.Inner<int>);
如何从变量中获取构造的泛型类型typeof(Outer<string>)
或泛型的值?typeof(string)
testType
解决方案
有趣 - 似乎外部类型的泛型参数被投射到内部类型:
var testType = typeof(Outer<string>.Inner<int>);
var outerType = testType.DeclaringType;
var outerTypeGenericParam = outerType.GetGenericArguments();
var testTypeGenericParam = testType.GetGenericArguments();
Console.WriteLine(outerType); // Test+Outer`1[T]
Console.WriteLine(outerTypeGenericParam[0]); // T
Console.WriteLine(testTypeGenericParam[0]); // System.String
Console.WriteLine(testTypeGenericParam[1]); // System.Int32
所以在你的情况下,单线将是:
testType.GetGenericArguments()[0]
推荐阅读
- r - 可格式化对象的粗体行名称
- python - 在 Python 3 中,单字节 (\xd0) 打印为两个字节的序列 (\xc3\x90)
- google-chrome - Windows 10 中的 chrome kiosk 模式,关闭 chrome 的正确方法
- php - 尝试在两个不同的表中输入数据时mysqli查询重复
- webrtc - 仅使用 STUN 服务器检测是否在对称 nat 后面
- go - 如何在 golang 中为我的测试用例正确创建模拟 http.request?
- python - 如何在 Python selenium 中使用 JavascriptExecutor 而不是 send_keys
- java - fabric8-maven-plugin - Dropwizard 应用程序的生成器(java-exec?)
- java - Java如何使用';'将其代码分隔成行 何时必须在 for 循环等中处理它们?
- java - 登月游戏。控件不起作用