我有一个输入字符串,它由文件接收。它包含一些值,用 ; 分隔。 例如。 1;2;3
我想将其转换为列表。该属性是通过反射检索的,因此我没有任何修复列表类型。
简而言之:作为输入,我有一个 PropertyInfo (PropertyType) 和一个字符串值。我想获取“PropertyType”类型的列表作为输出。
我想做类似的事情
private List<object> GetAsList(Type propertyType, string value)
{
List<object> list = new List<object>();
var items = value.Split('|');
foreach (var item in items)
{
list.Add(Convert.ChangeType(item, propertyType.GetGenericArguments().Single()));
}
return list;
}
这里的问题是,我无法分配一个列表,比如说 List()。我可以使用这样的东西:
if(propertyType == typeof(List<Int32>)
list = new List<Int32>();
else if(propertyType == typeof(List<Int64>)
list = new List<Int64>();
[...]
我认为这不是一个好的解决方案。您知道如何解决这个问题吗?
最佳答案
使你的方法通用:
private List<T> GetAsList<T>(string value)
{
List<T> list = new List<T>();
var items = value.Split('|');
foreach (var item in items)
{
list.Add((T)Convert.ChangeType(item, typeof(T)));
}
return list;
}
像这样使用它:
List<int> listOfInt = GetAsList<int>("1|2|3");
List<long> listOfLong = GetAsList<long>("5|6|7");
List<double> listOfDouble = GetAsList<double>("1.1|2|3.3");
如果编译时不知道类型,可以使用反射调用GetAsList:
var propTypeDouble = typeof(List<double>);
var listOfDoubleRuntime = typeof([DelaringType])
.GetMethod("GetAsList")
.MakeGenericMethod(propTypeDouble.GetGenericArguments().First())
.Invoke(null, new[] {"1.1|2.2|3.3"});
关于c# - 将 List<Object> 转换为未知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442475/