Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Двусмысленность при передаче делегата в конструктор

Имеется класс команды, в упрощенном виде выглядящий так :
public class Command {
public Command(int price, Action method) { method.Invoke(); } public Command(int price, Func method) { var id = method.Invoke(); } }
В конструкторе 1 принимающий int и Action - ссылку на метод который ничего не возвращает. В конструкторе 2 Func - ссылку на метод который возвращает целое число. Так же у меня есть 2 метода, котрые могут передаваться в конструктор :
public void toDosome() {
} public int newId() { return 100500; }
Далее я создаю обьект и проблем не возникает :
var command = new Command(11, newId);
Однако если вместо newId окажется toDosome :
var commandTo = new Command(1211, toDosome);
Мне выпадет исключение :
The call is ambiguous between the following methods or properties.
При этом я не могу удалить какой либо конструктор, что бы успешно создавать command или commandTo. Как поступить в такой ситуации ?


Ответ

Создавайте явно делегат типа Action, передавая целевую функцию делегату и проблема выбора перегрузки функции исчезнет
var commandTo = new Command(1211, new Action(toDosome));

Комментариев нет:

Отправить комментарий