c# - 将 List<Object> 转换为未知类型

标签 c# dynamic

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

相关文章:

c# - 如何显示asp.net缓存的内容?

c# - 具有标志属性的枚举

c# - 让 VS2015 验证 C# 早期语法以保持与 VS2013 兼容的方法

c# - 类型 xxxx 不应使用 xmlinclude 或 soapinclude

java - 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库

C# 动态运算符

c# - 将数据集写入 SQL 表

c# - 如何以编程方式检查 SMB 连接是否已加密?

c# - 复选框和模型绑定(bind)的动态列表

css - 提交表单时更改 CSS 规则?