Конечно, вы можете просто указать аргументы для функции, которую вы хотите использовать. Вы не можете просто вызвать функцию, которая требует аргументов без каких-либо.
delegate bool ParameterlessToBool(); // AKA: Func<bool>
delegate bool TwoParameterToBool(object a, object b); // AKA: Func<object, object, bool>
TwoParameterToBool objectsEqual = (a, b) => a.Equals(b);
object argument1 = 1;
object argument2 = 2;
ParameterlessToBool isEqual = () => objectsEqual(argument1, argument2);
bool result = isEqual(); // false
Сначала я объявил двух делегатов для использования в этом примере, ParameterlessToBool
и TwoParameterToBool
. Они эквивалентны делегатам каркаса Func<bool>
и Func<object, object, bool>
соответственно. Вы не обязаны это делать, просто у меня есть что поработать в примере.
Я использовал двухпараметрическую лямбду для инициализации переменной objectsEqual
типа TwoParameterToBool
. Он вызывает Equals()
по двум параметрам и возвращает результат. Затем я инициализировал два аргумента, которые необходимы для возможности вызова этой новой функции. Затем использовали лямбду с нулевым параметром для инициализации isEqual
переменной типа ParameterlessToBool
. Он вызывает двухпараметрическую функцию с двумя аргументами, определенными ранее, и возвращает результат. Затем вызывается функция, чтобы показать, как она используется.