c# - 如何在 C# 中在运行时转换泛型类型

标签 c# generics reflection

我需要创建一个 IEnumerable<IEnumerable<T>>当我只知道T在运行时。

我是这样建立我的收藏的:

new List<List<object>>() 

内部列表中的所有对象都是 T

但是由于协变/逆变(永远记不起它是哪一个!)我的ListList这不是 IEnumerableIEnumerable

我该怎么办?

我试过使用 Convert.ChangeType但它呻吟着List不是 IConvertible

线索:阅读问题。再次。我说我只知道T在运行时。

最佳答案

好的,根据道德大师的回答,我想出了这个。非常简单。

public static IEnumerable Cast(this IEnumerable self, Type innerType)
{
    var methodInfo = typeof (Enumerable).GetMethod("Cast");
    var genericMethod = methodInfo.MakeGenericMethod(innerType);
    return genericMethod.Invoke(null, new [] {self}) as IEnumerable;
}

简单。在这里写博客:Casting an enumerable when the inner type is only known at runtime

关于c# - 如何在 C# 中在运行时转换泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676989/

相关文章:

c# - UseJwtBearerAuthentication 失败,IDX10504 : Unable to validate signature, token 没有签名

c# - ASP.net 将宽度设置为存储在 C# 中的值

c# - Type.IsPublic 和 Type.IsVisible 有什么区别

C# 通过属性反射设置属性值

c# - 确保目标继承自定义属性的一些接口(interface)

c# - 将键值对分组到字典

java - 泛型类型变量中的局部类型推断和逆变

java - Hibernate 不更新 MySQL 数据库中的记录

c# - 如何在 C# 中检索属性的属性?

C# - 高级继承