簡體   English   中英

在C#中的列表類型之間轉換

[英]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的類型MyListsIEnumerable<ParentClass> ,則MyLists轉換。

更換

Object MyLists = null;  

有了這個

IList<ParentClass> MyLists = null;

實例化MyLists像這樣:

MyLists = new List<ParentClass>();

現在可以添加ParentClassClassA等的實例。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM