Преобразование обобщения у 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>();
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы