【发布时间】:2020-01-13 13:14:27
【问题描述】:
我有一个自定义class MyList<T> : MyBaseList, IList<T> 和它的一些实例myList1, myList2...,我将其存储为object(来自反射,我无法更改)在List<object> ListOfLists = new List<object>() 中,例如myList1 被装箱为object 存储在 ListOfLists[0] 等等。
我的班级MyList<T> 实现:
private List<T> items = new List<T>();
...
IEnumerator IEnumerable.GetEnumerator()
{
return this.items.GetEnumerator();
}
当尝试遍历myList1, myList2... 的每个元素时...
bool Iterate<T>(T targetElem)
{
foreach (var listObj in ListOfLists)
{
var myIList= (IList<T>)listObj;
var myEList = myIList.Cast<MyList<T>>();
foreach (var myList in myEList)
{
foreach (var listElem in myList)
{
if (EqualityComparer<T>.Default.Equals(listElem , targetElem)) return true;
}
}
}
return false;
}
...我在foreach (var myList in myEList) 收到错误System.InvalidCastException。
有人知道如何解决这个问题吗?
提前致谢!
【问题讨论】:
-
什么是
MyList<T>? -
一个接受任何对象的自定义类...更新
-
请发minimal reproducible example,这样我们才能真正在本地重现您的问题。
-
您的
Iterate方法应该做什么?检查一个元素是否在列表列表中?我觉得你有一个额外的 foreach 循环...... -
我的
ListOfLists包含许多MyList<T>的实例,被装箱为对象;listObj´ is each of these objects (boxed lists) that I retrieve fromListOfLists`。
标签: c# foreach casting ienumerable