[英]Converting Between List Types in C#
我有以下課程:
ClassA
ClassB
ClassC
然后所有都繼承自:
ParentClass
在我的代碼中,我有一個名為MyLists的屬性,該屬性的類型為Object,聲明如下:
Object MyLists = null;
它的值可以是以下任何一種:
List<ClassA>
List<ClassB>
List<ClassC>
我希望做這樣的事情:
foreach(ParentClass o in MyLists)
//yada yada
但不幸的是,這似乎是不可能的。 我收到一個運行時錯誤說明:
Can't convert from List<ClassA> to List<ParentClass>
我寧願不要以如下代碼結尾:
if(MyLists is List<ClassA>)
{
// blah blah
}
else if(MyLists is List<ClassB>)
{
// blah blah
}
:
:
如何將MyLists轉換為List?
謝謝
如果您只需要枚舉值,則可以執行
foreach(var parent in (IEnumerable<ParentClass>)MyLists)
{
}
如果將MyLists
的類型MyLists
為IEnumerable<ParentClass>
,則MyLists
轉換。
更換
Object MyLists = null;
有了這個
IList<ParentClass> MyLists = null;
實例化MyLists
像這樣:
MyLists = new List<ParentClass>();
現在可以添加ParentClass
, ClassA
等的實例。
將MyLists
的類型更改為IEnumerable<ParentClass>
。 由於IEnumerable<T>
是協變的 ,所以可以工作。
IEnumerable<ParentClass> MyLists = null;
// fill it with one of the list types
foreach (var item in MyLists)
// do something
假定MyLists不是Object而是ParentClass的列表,則下面的文章已經描述並解決了您的難題: 將List <DerivedClass>轉換為List <BaseClass>
首先將每個列表中的對象轉換為ParentClass。 然后,將它們添加在一起。 然后,您可以列舉您的列表:
var castedlistA = listA.Cast<ParentClass>();
var castedlistB = listB.Cast<ParentClass>();
var castedlistC = listC.Cast<ParentClass>();
var fullList = castedListA.AddRange(castedListB).AddRange(castedListC);
foreach (var item in fullList)
{
//Do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.