2012-07-27 66 views
10

我有一個List<BaseClass>與其中的成員。我想將該列表(及其所有成員專門)投入List<ChildClass>類型,其中ChildClass繼承BaseClass。我知道我可以通過一個foreach得到相同的結果:演員填充名單<BaseClass>至列表<ChildClass>

List<ChildClass> ChildClassList = new List<ChildClass>(); 
foreach(var item in BaseClassList) 
{ 
    ChildClassList.Add(item as ChildClass); 
} 

但是有沒有一個更好的方法來做到這一點?注意 - 這是在WP7平臺上完成的。

回答

18

如果你真的確定所有項目都澆注料你可以這樣做:

ChildClassList = BaseClassList.Cast<ChildClass>().ToList(); 

您當前的代碼添加null如果BaseClass的項目不能被轉換爲ChildClass。如果這是真的你的意圖,這是等價的:

ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList(); 

但我寧願這個建議,其中包括類型檢查,並會跳過不匹配的項目:

ChildClassList = BaseClassList.OfType<ChildClass>().ToList(); 
+0

嘗試Botz的方式... – 2012-07-27 12:09:48

+0

謝謝 - 在這種情況下,我確定每個元素都是指定的類型。我已經將模型分爲「笨」(僅屬性)和「智能」(所有功能)版本,智能類繼承了愚蠢。 第一個例子在這裏工作就像它應該 - 謝謝你的幫助!這也適用於你@Adam Houldsworth – 2012-07-27 12:19:21

3

以下是幾乎等同於當前的代碼(唯一缺少的就是它不爲失敗石膏加空):

var childList = baseList.OfType<ChildClass>().ToList(); 

這將igno列表中包含ChildClass以外的其他派生類的情況。

您還可以使用:

var childList = baseList.Cast<ChildClass>().ToList(); 

但是,這將在東西它不能施放拋出InvalidCastException