Если это общие списки, например:
List<A> listA;
List<Aa> listAa;
Вы должны быть в состоянии сделать:
public IList<A> Lists
{
get
{
return listA.Concat(listB.Cast<A>()).ToList();
}
}
Вызов Enumerable.Cast позволит вам преобразовать List<Aa>
в IEnumerable<A>
(поскольку Aa является подклассом A), что заставит Concat работать. Затем вы можете преобразовать это обратно в List<A>
, вызвав ToList()
.
Что касается установщика свойств - я не рекомендовал бы, чтобы это свойство содержало установщик свойств. Это будет вести себя ОЧЕНЬ нестандартным образом. Вместо этого, скорее всего, было бы гораздо лучше создать собственный метод для обработки настроек списков.
Если вы собираетесь передать один список, содержащий классы Aa
и A
, вы можете использовать что-то вроде:
public void SetLists(IEnumerable<A> newElements)
{
this.listA.Clear();
this.listAa.Clear();
foreach(A aElem in newElements)
{
Aa aaElem = aElem as Aa;
if (aaElem != null)
this.listAa.Add(aaElem);
else
this.listA.Add(aElem);
}
}
В этом случае выполнение цикла на самом деле будет более эффективным, чем попытка использовать LINQ для установки этих массивов, поскольку вам потребуется некоторая нечетная фильтрация.