Страницы

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

пятница, 24 января 2020 г.

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

#c_sharp


Имеется класс команды, в упрощенном виде выглядящий так :

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. Как поступить в такой ситуации ?
    


Ответы

Ответ 1



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

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

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