Kri*_*ekk 14 c# inheritance windows-phone-7
我有一个List<BaseClass>成员.我想名单(及其所有成员特别是)转换为一个类型List<ChildClass>,其中ChildClass继承BaseClass.我知道我可以通过foreach获得相同的结果:
List<ChildClass> ChildClassList = new List<ChildClass>();
foreach( var item in BaseClassList )
{
ChildClassList.Add( item as ChildClass );
}
Run Code Online (Sandbox Code Playgroud)
但是有更简洁的方法吗?注意 - 这是在WP7平台上完成的.
Bot*_*000 22
如果你确定所有物品都是可浇铸的,你可以这样做:
ChildClassList = BaseClassList.Cast<ChildClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
null如果无法将BaseClass项强制转换为ChildClass,则会添加当前代码.如果那是你的意图,那就等同于:
ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList();
Run Code Online (Sandbox Code Playgroud)
但我宁愿建议这一点,其中包括类型检查,并将跳过不匹配的项目:
ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
以下几乎等同于您当前的代码(唯一缺少的是它不会为失败的强制转换添加空值):
var childList = baseList.OfType<ChildClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
这将忽略列表包含除ChildClass.
您还可以使用:
var childList = baseList.Cast<ChildClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
但这会抛出InvalidCastException它无法投射的东西。