C# 铸造填充列表<;基类>;列出<;儿童班>;

C# 铸造填充列表<;基类>;列出<;儿童班>;,c#,windows-phone-7,inheritance,C#,Windows Phone 7,Inheritance,我有一个列表,其中有成员。我想将列表(特别是它的所有成员)转换为list类型,其中ChildClass继承BaseClass。我知道我可以通过foreach获得相同的结果: List<ChildClass> ChildClassList = new List<ChildClass>(); foreach( var item in BaseClassList ) { ChildClassList.Add( item as ChildClass ); } List

我有一个
列表
,其中有成员。我想将列表(特别是它的所有成员)转换为
list
类型,其中
ChildClass
继承
BaseClass
。我知道我可以通过foreach获得相同的结果:

List<ChildClass> ChildClassList = new List<ChildClass>();
foreach( var item in BaseClassList )
{
    ChildClassList.Add( item as ChildClass );
}
List ChildClassList=newlist();
foreach(BaseClassList中的var项)
{
添加(作为ChildClass的项);
}

但是有没有更整洁的方法呢?注意-这是在WP7平台上完成的。

如果您确实确定所有物品都是可铸造的,则可以执行此操作:

ChildClassList = BaseClassList.Cast<ChildClass>().ToList();
但我建议这样做,包括类型检查,并将跳过不匹配的项目:

ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
ChildClassList=BaseClassList.OfType().ToList();
以下代码几乎等同于您当前的代码(唯一缺少的是它不会为失败的强制转换添加空值):


但是这会对它无法强制转换的内容抛出一个
InvalidCastException

谢谢-在这种情况下,我确信每个元素都是指定类型的。我将模型分为“dumb”(仅属性)和“smart”(所有功能)两个版本,其中smart类继承了dumb类。这里的第一个示例工作正常-感谢您的帮助!这也适用于你@Adam Houldsworth
ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
var childList = baseList.OfType<ChildClass>().ToList();
var childList = baseList.Cast<ChildClass>().ToList();