c# - 如何将对象转换为列表

标签 c# reflection

我有一个对象,它实际上是一个列表。我有一个字符串,其元素类型是什么,但我不知道如何将对象转换为列表?这是一些描述我的问题的代码。

class Data
{
    public int ID { get; set; }
    public List<double> Values { get; set; }
}

static void Main(string[] args)
{
    Data d = new Data() { ID = 69, Values = new List<double>() };
    d.Values.Add(1.0);
    d.Values.Add(2.0);

    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(Data));
    var propInfo = typeof(Data).GetProperties();

    foreach (var p in propInfo)
    {
        var Value = p.GetValue(d, null);
        var Type = p.PropertyType;

        if (Type.IsGenericType && Type.GetGenericTypeDefinition() == typeof(List<>))
        {
            // get the element type of a list
            var ElementType = Value.GetType().GetProperty("Item").PropertyType;

            // how to cast to List< "ElementType" > ???
        }
        else
        {
            types.Add( Type.FullName );
        }
    }
}

最佳答案

泛型和反射不能很好地配合。最好的选择是使用非通用 IList API:

IList list = (IList)Value;

然后就可以进行迭代、按索引访问、添加、删除等操作

关于c# - 如何将对象转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793151/

相关文章:

c# - 如何在 C# 中使用委托(delegate)向图表添加值

c# - 如何使用 JsonConverter 将我的字符串反序列化为十进制属性?

c# - Xml.Serialization,正确的追加方式

javascript - 给定对象在对象中的位置,如何修改对象属性

java - 通过 Java 反射的构造函数参数

c# - 平移 Canvas ,使点 (x,y) 位于中心

c# - 如何注册通用服务

c# - 在 List<T> 中搜索对象的所有公共(public)变量以查找特定字符串

Java 反射 : Call method from Interface name

java - 如何将 JTextField[][] 作为参数传递给动态加载的 java 类方法?