i'm trying to make data container class which has multiple list, i want to make property that offers gather these list's elements to one list
should i just code GatherAllCards() like below or are there any good way to compress the code.
classes named card* is derived class of 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();
}
}
Use AddRange
, which takes an IEnumerable<Card>
. IEnumerable<T>
is covariant, so passing it a List<SpecificTypeOfCard>
is fine.
cardList.AddRange(cardUnits);
cardList.AddRange(cardPlayerUnits);
cardList.AddRange(cardConsumables);
cardList.AddRange(cardWeapons);
cardList.AddRange(cardBases);