将填充的List <BaseClass>转换为List <ChildClass>

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)


Ada*_*rth 5

以下几乎等同于您当前的代码(唯一缺少的是它不会为失败的强制转换添加空值):

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它无法投射的东西。