C#动态通用列表

Iam*_*mIC 7 c# generics dynamic type-conversion c#-4.0

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

我可以做到以下几点,但由于它是动态的,我怀疑存在速度惩罚.我正在为异国情调的数据库编写一个包装器,因此速度至关重要.

List<dynamic> gdb = new List<dynamic>()
Run Code Online (Sandbox Code Playgroud)

我在动态泛型类型中阅读了这篇文章,但无法让它发挥作用.具体来说,该对象不会显示为List,因此没有添加方法.

    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);
Run Code Online (Sandbox Code Playgroud)

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

List<System.Int32>
List<System.Int64>
List<System.String>
Run Code Online (Sandbox Code Playgroud)

McG*_*gle 5

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

var gdb = (IList)Activator.CreateInstance(specificListType);
gdb.Add(1);
Run Code Online (Sandbox Code Playgroud)

请注意,ArgumentException如果您要添加的类型与泛型类型不匹配,则会抛出上述内容.

  • @IanC当你添加这个方法时,使用`IList`仍会导致整数被装箱和取消装箱... (2认同)