如何解决c#将多个列表<派生类>的元素组装到唯一列表<基类>的最佳方法
我正在尝试制作具有多个列表的数据容器类, 我想让提供的属性将这些列表的元素收集到一个列表中
我应该像下面那样编写 GatherAllCards() 代码还是有什么好的方法来压缩代码。
名为card*的类是Card
的派生类public class CardContainer : MonoSingleon<CardContainer>
{
[Serializefield]
private List<CardUnit> cardUnits;
[Serializefield]
private List<CardplayerUnit> cardplayerUnits;
[Serializefield]
private List<CardConsumable> cardConsumables;
[Serializefield]
private List<CardWeapon> cardWeapons;
[Serializefield]
private List<Card> cardBases;
public IReadOnlyList<Card> AllCard
{
private set;
get;
}
private void GatherAllCards()
{
List<Card> cardList = new List<Card>(500);
foreach (var card in cardUnits)
cardList.Add(card);
foreach (var card in cardplayerUnits)
cardList.Add(card);
foreach (var card in cardConsumables)
cardList.Add(card);
foreach (var card in cardWeapons)
cardList.Add(card);
foreach (var card in cardBases)
cardList.Add(card);
AllCard = cardList.AsReadOnly();
}
}
解决方法
使用 AddRange
,它需要一个 IEnumerable<Card>
。 IEnumerable<T>
是 covariant,所以传递一个 List<SpecificTypeOfCard>
就可以了。
cardList.AddRange(cardUnits);
cardList.AddRange(cardPlayerUnits);
cardList.AddRange(cardConsumables);
cardList.AddRange(cardWeapons);
cardList.AddRange(cardBases);
,
或者另一种方式是Concat
,您只需要先投射到Card
连接两个序列。
AllCard = cardUnits
.Cast<Card>()
.Concat(cardPlayerUnits)
.Concat(cardConsumables)
.Concat(cardWeapons)
.Concat(cardBases)
.ToList();
或
AllCard = new List<Card>()
.Concat(cardUnits)
.Concat(cardPlayerUnits)
.Concat(cardConsumables)
.Concat(cardWeapons)
.Concat(cardBases)
.ToList();
您也可以使用 Union
,但它确实有细微差别
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。