gpt4 book ai didi

c# - 将 List 转换为未知类型
转载 作者:行者123 更新时间:2023-11-30 20:46:03 24 4
gpt4 key购买 nike

我有一个输入字符串,由一个文件接收。它包含一些值,由 ; 分隔例如。 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/

24 4 0