我想创建一个通用的 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/