C #: Могу ли я привести явный делегат к делегату Action? - PullRequest
4 голосов
/ 10 октября 2009

Дано:

delegate void Explicit();

Могу ли я:

public void Test(Explicit d)
{
    Action a;
    a = d; // ????
}

У меня есть сценарий, в котором мне нужно перегрузить конструктор, который имеет:

public MyClass(Expression<Action> a) {}

но следующая перегрузка неоднозначна:

public MyClass(Action a) {}

Я полагал, что использование явного делегата разрешит неоднозначность, но мне нужно привести этот явный делегат к действию, чтобы использовать существующий код.

Ответы [ 3 ]

12 голосов
/ 10 октября 2009
Action a = new Action(d);
8 голосов
/ 10 октября 2009

Нет, вы не можете разыгрывать разные типы делегатов с совпадающими подписями между собой Вы должны создать новое делегатное / лямбда-выражение целевого типа и перейти в исходное.

4 голосов
/ 10 октября 2009

Вы также можете указать метод Invoke для создания нового делегата Action

Action a = new Action(d.Invoke);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...