c# - 创建 IEnumerable并向其中添加项目
问题描述
我有一个给定type
的逗号分隔值string
:
Type type = service.getType();
String csv = "1,2,3";
我需要将csv
字符串转换为IEnumerable
of type
。
我知道那type
将是数字,例如 , ,int
等。short
long
我能够吐出csv
并将每个转换为给定的type
..
String[] inputs = csv.Split(',');
TypeConverter converter = TypeDescriptor.GetConverter(modelType);
if (converter != null) {
foreach (String input in inputs) {
if (converter.CanConvertTo(type)) {
var number = converter.ConvertFromString(input);
// Add number to an IEnumerable of numbers
}
}
}
我无法创建一个IEnumerable
oftype
并向其添加数字。
我怎样才能做到这一点?
解决方案
您实际上在运行时拥有该类型,因此您需要使用反射来创建一个类型的对象,List<T>
其中 T 是Type
您从服务中获取的类的实例。以下代码将创建一个类型的实例,List<T>
而T
在编译时不是类型,而是在运行时解析。以下是创建它的代码:
var listTypeInstance = typeof(List<>);
var instanceList = listTypeInstance.MakeGenericType(type);
var numbers = (IList)Activator.CreateInstance(instanceList);
现在您可以调用该Add
方法并在其中添加每个数字,例如:
var number = converter.ConvertFromString(input);
numbers.Add(number);
在您的代码中调整后将如下所示:
var listTypeInstance = typeof(List<>);
var instanceList = listTypeInstance.MakeGenericType(type);
var numbers = (IList)Activator.CreateInstance(instanceList);
foreach (String input in inputs) {
if (converter.CanConvertTo(type)) {
var number = converter.ConvertFromString(input);
// Add number to an IEnumerable of numbers
numbers.Add(number);
}
推荐阅读
- mysql - Alter table default character set 修改 MySQL 5.6 中的行
- hadoop - 如何在 Apache Hadoop 2 中使用 HDFS Intra-DataNode 磁盘平衡器?
- javascript - 通过 Id 获取元素更改样式元素
- javascript - 如何使用 excel 文件发出 post 请求?
- python - 列表的最大功能无法正常工作
- python - Python:两个解析语句不能一起工作
- java - 从持续时间字符串到 milis 是否有任何开箱即用的映射器?
- c - 为什么 printf() 打印两个字符数组?
- android - 从片段中获取非活动类中的 SharedPreference 值
- python - 如何使用 pytrends 从日常获取 google_interest_data