繁体   English   中英

如何将对象投射到列表

[英]How to cast an object to a List

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

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;

然后,您可以迭代,按索引访问,添加,删除等。

将 object 投到列表中<object><div id="text_translate"><p>由于某些我无法控制的原因,需要定义我的一种方法来接受 object 类型的一个参数。 但我知道这个参数的值实际上是 List 类型,带有一个我不知道的通用参数。</p><p> 我正在尝试将此 object 转换为 List&lt;object&gt;,但不知道如何在不知道确切的通用参数是什么的情况下执行此操作。</p><p> 我想做这样的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法会很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我坚持使用 object 参数。 知道如何解决这个问题吗?</p></div></object>

[英]Cast object to List<object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将此字符串列表转换为对象 如何将对象强制转换为列表<object>并把它变成一个数组? 如何将自定义对象强制转换为List <object> 如何将List <object>转换为List <SomethingElse> 将 object 投到列表中<object><div id="text_translate"><p>由于某些我无法控制的原因,需要定义我的一种方法来接受 object 类型的一个参数。 但我知道这个参数的值实际上是 List 类型,带有一个我不知道的通用参数。</p><p> 我正在尝试将此 object 转换为 List&lt;object&gt;,但不知道如何在不知道确切的通用参数是什么的情况下执行此操作。</p><p> 我想做这样的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法会很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我坚持使用 object 参数。 知道如何解决这个问题吗?</p></div></object> 如何将列表集合转换为派生集合对象? 如何在 List 中转换对象类型<t> 。除了 如何将类对象转换为列表? 如何投射清单 <T> 对象变成文本 将对象转换为通用列表
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM