存储变量类型并使用它在运行时创建集合
我有一个项目,它在SQL中存储值,然后检索它们进行分析。 为了跟踪可能存储的值类型,我创建了一个大致如下的类:
private class DataField { public string FieldName; public string FieldType; }
在读取值进行分析时,使用switch语句如下(简化):
switch (DataField.FieldType) { case "int": List InputData = new List(); // Populate list from DB break; case "bool": List InputData = new List(); // Populate list from DB break; }
我没有在多个地方维护代码,而是在寻找摆脱switch语句的方法,但这意味着我需要根据类型动态创建集合。 当前该类型是(天真地?)一个字符串,但我想我可以通过更改类来改进它:
private class ImprovedDataField { public string FieldName; public Type FieldType; }
然后以某种方式动态创建集合:
Type DataType = typeof(DataField.FieldType); List InputData = new List(); // Populate list from DB
这当然不起作用,导致Type or namespace name expected
错误。
不幸的是,我不太熟悉使用Type
类,也没有generics或匿名类型,因为我搜索解决方案(似乎没有什么是合适的)。
如何减少代码重复,其中每个switch语句分支的唯一区别是生成的变量集合的类型?
如果要在运行时创建已知类型的静态类型对象集合,则需要使用reflection。 请参阅ie 博客条目 – 这是创建List
的解决方案:
public static IList CreateGenericList(Type collectionType) { var listType = typeof(List<>).MakeGenericType(new[] { collectionType}); return (IList) Activator.CreateInstance(listType); }
所以在你的例子中:
Type dataType = DataField.FieldType; IList inputData = CreateGenericList(dataType); // Populate list from DB
你为什么需要一个打字的collections? 为什么不使用ArrayList?
上述就是C#学习教程:存储变量类型并使用它在运行时创建集合分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
ArrayList list = new ArrayList() list.Add( /* value read from database */ )
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026191.html