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

时间:2016-08-18 11:16:08

标签: c# casting primitive-types

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

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

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

只要列表的类型不是原始列表,它就可以正常工作,因为所有类都继承自object。但原始人并不是。因此,转换为IEnumerable<object>返回null。如果它是一个整数列表,我需要转发IEnumerable<int>IEnumerable<bool>,如果它是一个布尔列表等等。当然,我只想要一个通用演员。

任何想法,如何获取原始列表?

2 个答案:

答案 0 :(得分:4)

只需使用IEnumerable代替IEnumerable<object>;虽然int[]没有实现IEnumerable<object>,但 实施IEnumerable

IEnumerable enumerable = myObject as IEnumerable;

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

答案 1 :(得分:1)

如果您真的想使用对象,请使用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);