Создать функцию, которая дает нам другую функцию - PullRequest
0 голосов
/ 27 февраля 2019

В качестве ввода в другую программу, которую я использую, мне нужно ввести делегата в форме:

Func<double, double, double>.

Я хочу, чтобы функция для отправки была

F(a, b) = a + b * c + d

, где c и d - известные постоянные, известные во время выполнения.

Так что мне нужен какой-то методкоторый принимает значения c и d, а затем дает мне функцию F(a,b).Я думаю, мне нужно сначала создать метод:

double der(double a, double b, double c, double d)
{
   return a + b * c + d;
}

И из этого метода мне нужно что-то сделать с делегатами, чтобы получить мою функцию.Вы видите, как решить эту проблему?

1 Ответ

0 голосов
/ 27 февраля 2019

Вам необходимо определить возвращаемое значение как ожидаемое значение Func:

Func<double, double, double> MakeFunction(double c, double d)

, теперь вы можете использовать лямбда-выражение для создания желаемой функции:

return (a,b) => a + b * c + d;

Объяснение:

(a,b) обозначает входные параметры для вашей функции.Поскольку указанное возвращаемое значение в сигнатуре метода указывает, что это будут 2 параметра типа double.часть после => обозначает вычисление, которое будет выполнено.

Теперь вы можете использовать его следующим образом:

var myFunc = MakeFunction(3, 4);    
Console.WriteLine(myFunc(1, 2));

Код теста:

double a = 1;
double b = 2;
double c = 3;
double d = 4;
var myFunc = MakeFunction(c, d);
Console.WriteLine("Func: " + myFunc(a, b));
Console.WriteLine("Direct test: "a + b * c + d);

ВЫХОД:
Функция: 11
Прямой тест: 11

...