Проблема преобразования типов в generic методах

Есть следующий пример (переписан для упрощения понимания):

public class Programm
{
    public static void Main(string[] args)
    {
        var warehouse = new Warehouse_var1<int>();
        warehouse.AddBoxFruit<Apple>(new AppleBox());
    }
}

public class Warehouse_var1<TAmount>
{
    private List<BoxFruit<Fruit<TAmount>>> list = new List<BoxFruit<Fruit<TAmount>>>();

    public void AddBoxFruit<TFruit>(BoxFruit<TFruit> boxFruit)
        where TFruit : Fruit<TAmount>
    {
        MyGenericMethod<TFruit>();

        list.Add(boxFruit);
    }

    private void MyGenericMethod<TFruit>()
    {
        Console.WriteLine("Generic Method!");
    }
}

//Модель фрукта, количество которого измеряется в TAmount
public class Fruit<TAmount> { }
//Реализация фрукта - Яблоко
public class Apple : Fruit<int> { }
//Реализация фрукта - Груша
public class Pear : Fruit<long> { }

//Имеется коробка, для хранения фруктов
public class BoxFruit<TFruit> { }
//Коробка с яблоками
public class AppleBox : BoxFruit<Apple> { }
//Коробка с грушами
public class PearBox : BoxFruit<Pear> { }
  1. Имеются фрукты, для которых можно указать, в чем измеряется их количество TAmount.
  2. Есть коробки, которые хранят определенные фрукты TFruit.
  3. И есть главный класс Warehouse, который хранит коробки с фруктами, но только с определенным типом измерения их количества TAmount.

Склад(Warehouse) должен уметь добавлять к себе коробки с фруктами только с конкретным указанным TAmount у Фрукта. Для этого реализован метод AddBoxFruit. Он является generic, т.к. в нем используется MyGenericMethod, который на основании переданного типа, будет совершать какие-либо действия, от данного метода отказаться нельзя, он необходим для правильной работы программы. После его выполнения - элемент добавляется в список.

Компилятор выкидывает следующие ошибку: введите сюда описание изображения

Почему так происходит, если у метода установлено ограничение where TFruit : Fruit<TAmount> т.е. точно такое же, как и в списке ?

Каким-то образом нужно сделать так, чтобы можно было добавлять в коллекцию любые коробки с фруктами, при этом, чтобы обязательно срабатывал GenericMethod на основании типа переданного фрукта.


Ответы (0 шт):