当前位置:  开发笔记 > 编程语言 > 正文

将接收到的对象转换为List <object>或IEnumerable <object>

如何解决《将接收到的对象转换为List<object>或IEnumerable<object>》经验,为你挑选了5个好方法。

我正在尝试执行以下演员表

private void MyMethod(object myObject)  
{  
    if(myObject is IEnumerable)  
    {
        List collection = (List)myObject;  
        ... do something   
    }  
    else  
    {  
        ... do something  
    }  
}


但我总是得到以下例外:

无法转换类型为'System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List1 [System.Object]'的对象

我真的需要这个工作,因为这个方法需要非常通用才能接收单个对象和两个未指定类型的集合.

这是可能的,还是有另一种方法来实现这一点.

谢谢.



1> erikkallen..:

C#4将具有协变和逆变模板参数,但在此之前你必须做一些非泛型的事情

IList collection = (IList)myObject;



2> andleer..:

您不能将IEnumerable 转换为List .

但您可以使用LINQ完成此任务:

var result = ((IEnumerable)myObject).Cast().ToList();


这也是创建一个新列表,而不是铸造原始列表.

3> Chris Holmes..:

问题是,你正试图向上转向更丰富的对象.您只需将项目添加到新列表:

if (myObject is IEnumerable)
{
   List list = new List();
   var enumerator = ((IEnumerable) myObject).GetEnumerator();
   while (enumerator.MoveNext())
   {
      list.Add(enumerator.Current);
   }
}



4> Jon Skeet..:

你真的需要比普通的更多信息IEnumerable吗?只需将其投入使用即可foreach.我在一些协议缓冲区中遇到了完全相同的情况,并且我发现转换IEnumerable(或IList像列表一样访问它)非常有效.



5> Manish Nayak..:

该守则对我有用

List collection = new List((IEnumerable)myObject);

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有