Преобразование обобщения у 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>(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д