Login
C# не работает контравариация в параметрах делегатов
161 просмотров
Перейти к просмотру всей ветки
Zuletzt geändert Gestern, 15:26 (alex445)
Есть классы
class Base {}
class Derived {}
Есть делегат
delegate void MyDelegate(Base obj)
Почему я не могу создать такой делегат через лямбду?
MyDelegate myDel = (Derived obj) => {};
Говорит, типы не совпадают - хочет Base obj (compile error CS1678). При этом в самом теле лямбды можно приводить параметры и нормально с ними работать:
MyDelegate myDel = (Base obj) =>
{
Derived der = (Derived)obj;
};
ИИ пишет, что контравариация в лямбдах есть и первый вариант лямбды должен работать.
.NET 8.
Вот если бы был делегат с параметром Derived, а я бы передавал в лямбде Base, то не сработало бы - и народ в интернете пишут, что так не работает. А наоборот-то почему у меня не пашет?
Zurück