Преобразование обобщения у list'a - C#
Формулировка задачи:
Пишет, что "Не удается неявно преобразовать тип "System.Collections.Generic.List<Car>" в "System.Collections.Generic.List<IActive>"". Это ошибка в getter'е AnotherActiveElements, я понимаю, почему она происходит, но как исправить не знаю. Как тут быть? Через копирование в какой-нибудь new List<IActive> в getter'е не вариант, нужно передать ссылку, а не создавать новый список, так как AnotherCars может меняться извне, в то время как другие экземпляры классов, которые однажды запросят и сохранят у себя этот список IActive объектов будут иметь "устаревший" список. Как вариант, передавать в параметрах Car и отсортированный List<IActive> anotherActiveElements, и List <Machine> anotherMachines. Но мне этот способ не очень нравится, хочется чтобы сортировка производилась как бы внутри. Суть в том, что из объектов anotherMachines должен быть активен только один (если он там есть), при этом Machine не должен реализовывать IActive.
Вот код:
interface IActive
{
bool Activated { get; set; }
List<IActive> AnotherActiveElements { get; }
}
class Car: Machine, IActive
{
private bool activated;
public bool Activated
{
get
{
return activated;
}
set
{
foreach (Car car in anotherMachines)
if (car.activated)
car.Activated = false;
activated = value;
}
}
public List<IActive> AnotherActiveElements
{
get
{
return anotherMachines.FindAll (x => x is IActive);
}
}
public Car (List<Machine> anotherMachines, bool activated = false) :
base (anotherMachines)
{
Activated = activated;
}
}
abstract class Machine
{
protected List<Machine> anotherMachines { get; private set; }
public Machine (List<Machine> anotherMachines)
{
this.anotherMachines = anotherMachines;
}
}Решение задачи: «Преобразование обобщения у list'a»
textual
Листинг программы
public IEnumerable<IActive> AnotherActiveElements
{
get
{
return anotherMachines.OfType<IActive>();
}
}