将基本类型列表转换为 IEnumerable<object>

Casting a list of a primitive type to a IEnumerable<object>

在我的 C# 程序中,我需要将对象转换为 IEnumerable<object>。关于那个对象,我只知道它是一个列表 (Type.IsGenericType):

IEnumerable<object> iEnu = myObject as IEnumerable<object>;

if (iEnu != null)
  foreach (object o in iEnu)
    // do stuff

只要列表的类型不是原始类型,它就可以正常工作,因为所有 类 都继承自对象。但是原始人没有。因此,强制转换为IEnumerable<object> returns null。如果它是一个整数列表,我需要转换为 IEnumerable<int>,如果它是一个布尔值列表,则需要转换为 IEnumerable<bool>,依此类推。当然,我只想要一个通用演员表。

知道如何获取原始列表吗?

只需使用 IEnumerable 而不是 IEnumerable<object>;尽管 int[] 没有实现 IEnumerable<object>,但它 确实 实现了 IEnumerable:

IEnumerable enumerable = myObject as IEnumerable;

if (enumerable != null)
{
    foreach (object o in enumerable)
    {
        // do stuff
    }
}

如果您真的想使用对象,请使用 IEnumerable。但是,如果您需要将对象转换为某种具体类型的 IEnumerable,您可以使用 Enumerable.Cast<T> Linq 扩展方法。

msdn Enumerable.Cast

Object obj = new int[] { 1, 2, 3, 4 };
IEnumerable collection = obj as IEnumerable;
IEnumerable<int> integers = collection.Cast<int>();
foreach(int i in integers)
    System.Console.WriteLine(i);