14

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

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

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

4

2 回答 2

23

如果您确实确定所有项目都是可铸造的,则可以这样做:

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

null如果不能将 BaseClass 项强制转换为 ChildClass,则您当前的代码会添加。如果这真的是你的意图,这将是等效的:

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

但我宁愿建议这样做,其中包括类型检查并将跳过不匹配的项目:

ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
于 2012-07-27T12:06:58.023 回答
5

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

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

这将忽略列表包含除ChildClass.

您还可以使用:

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

但这会抛出InvalidCastException它无法施放的东西。

于 2012-07-27T12:08:32.440 回答