在我的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>
,如果它是一个布尔列表等等。当然,我只想要一个通用演员。
任何想法,如何获取原始列表?
答案 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扩展方法。
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);