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();