如何将object
投射到IEnumerable<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();
}
答案 0 :(得分:16)
如果没有具体的用例,很难回答这个问题,但是可能发现只需转换为非通用的IEnumerable
接口就足够了。
对于大多数被视为“序列”的类型,这通常有两个原因。
IEnumerable
。IEnumerable<T>
接口继承自IEnumerable
,因此转换应该适用于System.Collections.Generic,LINQ序列等中的泛型集合类。修改强>:
至于为什么你提供的样本不起作用:
IEnumerable<Derived>
视为IEnumerable<Base>
。IEnumerable<T>
是协变的,但这在C#4中不起作用,因为值类型不支持方差 - 来自int[]
的转换(IEnumerable<int>
) - &gt; IEnumerable<object>
无法成功。答案 1 :(得分:14)
我遇到同样的问题,协方差不支持值类型,我有一个object
,实际类型为List<Guid>
,需要一个IEnumerable<object>
。只有IEnumerable不够好才能生成IEnumerable的方法是使用linq Cast方法
((IEnumerable)lhsValue).Cast<object>()