将对象转换为IEnumerable <object>?

mpe*_*pen 11 c# casting

我怎样才能施放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();
}
Run Code Online (Sandbox Code Playgroud)

Ani*_*Ani 16

没有具体的用例,很难回答这个问题,但你可能会 发现只需转换到非泛型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[](an IEnumerable<int>)- >的转换 IEnumerable<object> 不能成功.


Bra*_*AGr 14

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

((IEnumerable)lhsValue).Cast<object>()
Run Code Online (Sandbox Code Playgroud)