C# 动态泛型列表

标签 c# c#-4.0 generics dynamic type-conversion

我想创建一个通用的 List<>,其类型在运行时声明。

我可以执行以下操作,但由于它是动态的,我怀疑速度会有所下降。我正在为异国情调的数据库编写包装程序,因此速度至关重要。

List<dynamic> gdb = new List<dynamic>()

我读了this post在动态泛型类型中,但无法使其工作。具体来说,该对象没有显示为列表,因此没有添加方法。

    Type ac;

    switch (trail[dataPos].Type)
    {
        case GlobalsSubscriptTypes.Int32:
            ac = typeof(System.Int32);

            break;
        case GlobalsSubscriptTypes.Int64:
            ac = typeof(System.Int64);

            break;

        default:
            ac = typeof(System.String);

            break;
    }

    var genericListType = typeof(List<>);
    var specificListType = genericListType.MakeGenericType(ac);
    var gdb = Activator.CreateInstance(specificListType);

如何让 gdb 显示为以下之一:

List<System.Int32>
List<System.Int64>
List<System.String>

最佳答案

使用 Activator.CreateInstance 后,您可以将结果转换为适当的类型。例如,您可以使用 IList:

var gdb = (IList)Activator.CreateInstance(specificListType);
gdb.Add(1);

请注意,如果您要添加的类型与通用类型不匹配,上面的代码将抛出一个 ArgumentException

关于C# 动态泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053003/

相关文章:

c# - 使用 GDI+ 写入多行字符串

c# - Active Directory 用户密码到期日期 .NET/OU 组策略

c# - 我是否需要维护计划来防止将来发生已知的 SQL Server 超时?

c# - 在 C#/.NET 中检测图像 URL

c# - SslStream.Read() 的奇怪行为

haskell - 有没有办法使用泛型将 Maybe 构造函数应用于记录的每个字段?

c# - 使用 .NET 2.0 删除 List<T> 中的重复项

c# - 计算类文件中 appconfig 中的键数

c# - 来自基本类型的操作泛型

c# - 从包含泛型类的列表中删除重复项