繁体   English   中英

将对象转换为IEnumerable <object> ?

[英]Cast object to IEnumerable<object>?

如何将objectIEnumerable<object>

我知道该对象实现了IEnumerable<object>但我不知道它是什么类型。 它可以是一个数组,一个List<T> ,或者其他什么。


一个简单的测试用例我正在努力工作:

static void Main(string[] args)
{
    object arr = new[] { 1, 2, 3, 4, 5 };
    foreach (var item in arr as IEnumerable<object>)
        Console.WriteLine(item);
    Console.ReadLine();
}

没有具体的用例,很难回答这个问题,但是你可能会发现只需转换到非通用的IEnumerable接口就足够了。

对于大多数被认为是“序列”的类型,这通常有两个原因。

  1. “经典”.NET 1.x集合类实现IEnumerable
  2. 通用IEnumerable<T>接口继承自IEnumerable ,因此转换应该适用于System.Collections.Generic,LINQ序列等中的泛型集合类。

编辑

至于为什么你提供的样本不起作用:

  1. 这在C#3中不起作用,因为它不支持通用接口协方差 - 您无法将IEnumerable<Derived>视为IEnumerable<Base>
  2. 尽管IEnumerable<T>是协变的,但这在C#4中不起作用,因为值类型不支持方差 - 来自int[]IEnumerable<int>- > IEnumerable<object>不能成功。

我遇到了同样的问题,协方差不支持值类型,我有一个object和实际类型的List<Guid> ,需要一个IEnumerable<object> 只有IEnumerable不够好才能生成IEnumerable的方法是使用linq Cast方法

((IEnumerable)lhsValue).Cast<object>()

演员收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在尝试执行以下演员</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我总是以以下异常结束:</p><p> 无法将“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要这个工作,因为这个方法需要非常通用才能接收单个对象和 collections 两种未指定的类型。</p><p> 这是可能的,还是有另一种方法可以做到这一点。</p><p> 谢谢你。</p></div></object></object>

[英]Cast received object to a List<object> or IEnumerable<object>

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM