Назначьте делегата, который принимает параметры

2

Я рассматриваю метод BackgroundWorker.ReportProgress. Он может принимать 1 param (int) или два параметра (int, object).

Если я хочу назначить ReportProgress следующим образом:

var ReportProgressMethod = backgroundWorker.ReportProgress;

Я получаю сообщение о том, что существует двусмысленная ссылка, потому что (конечно) метод может принимать наборы параметров.

Как изменить приведенный выше оператор, чтобы сказать, что я хочу использовать версию метода int, object.

(Идея заключается в том, что я хочу передать ReportProgressMethod в качестве параметра для метода.)

Теги:
delegates
c#-3.0

2 ответа

13
Лучший ответ
Action<int, object> reportProgressMethod = backgroundWorker.ReportProgress;
  • 0
    спасибо за маркировку кода. Я не был уверен, что компилятор сможет использовать информацию о типе из lhs для определения перегрузки метода
  • 0
    Как странно, это полностью работает ...
2

Существует несколько способов помочь компилятору, но в основном вам просто нужно сделать тип делегата явным. Мое предпочтение было бы следующим:

var ReportProgressMethod = new Action<int,object>(backgroundWorker.ReportProgress);

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

  • 0
    Я не думаю, что текущий компилятор выводит типы делегатов.
  • 0
    Argh и SO убирает углы, когда это не код
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню