Передача функции C # в качестве аргумента

Использовать lang атрибут на входе. Locale на моем веб-приложении fr_FR, lang = "en_EN" на номере ввода, и я могу без разницы использовать запятую или точку. Firefox всегда отображает точку, Chrome показывает запятую. Но оба партнера действительны.

114
задан 10101010 7 September 2017 в 20:57
поделиться

1 ответ

В .Net (v2 и более поздних версиях) есть несколько универсальных типов, которые очень упрощают передачу функций в качестве делегатов.

Для функций с возвращаемыми типами есть Func<>, а для функций без возвращаемых типов — Action<>.

И Func, и Action могут принимать от 0 до 4 параметров. Например, Func < double, int > принимает в качестве параметра один тип double и возвращает целое число. Действие < double, double, double > принимает в качестве параметров три значения типа double и ничего не возвращает (void).

Таким образом, вы можете объявить свою функцию Diff принимающей Func:

public double Diff(double x, Func<double, double> f) {
    double h = 0.0000001;

    return (f(x + h) - f(x)) / h;
}

И затем вы называете ее так, просто давая ей имя функции, которое соответствует сигнатуре вашей Func или Action:

double result = Diff(myValue, Function);

Вы можете даже напишите функцию в строке с лямбда-синтаксисом:

double result = Diff(myValue, d => Math.Sqrt(d * 3.14));
160
ответ дан 24 November 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: