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)
使用后Activator.CreateInstance,可以将结果转换为适当的类型.你可以使用IList例如:
var gdb = (IList)Activator.CreateInstance(specificListType);
gdb.Add(1);
Run Code Online (Sandbox Code Playgroud)
请注意,ArgumentException如果您要添加的类型与泛型类型不匹配,则会抛出上述内容.