Я только что заметил, что я повторяю много кода C # в своем приложении ASP.NET, поэтому хочу создать универсальный метод. У меня есть ряд частных методов, таких как:
private void PopulateMyRepeatedControl()
{
DBUtil DB = new DBUtil();
DataTable symbols = GetSelectedSymbols();
DataTable tradeGrades = GetSelectedTradeGrades();
DataTable executionGrades = GetSelectedExecutionGrades();
chtMyRepeatedChart.DataSource = DB.MyRepeatedCall (
int.Parse(txtStartBalance.Text),
int.Parse(ddlTradeTypes.SelectedValue),
ddlRepeatedTrades.SelectedValue,
radSide.SelectedValue,
ddlTradeSetups.SelectedValue,
symbols,
ddlChartTimeFrames.SelectedValue,
int.Parse(ddlHours.SelectedValue),
int.Parse(ddlYears.SelectedValue),
int.Parse(ddlMonths.SelectedValue),
int.Parse(ddlDays.SelectedValue),
int.Parse(ddlNumSCs.SelectedValue),
txtDateFrom.Text,
txtDateTo.Text,
tradeGrades,
executionGrades,
int.Parse(txtMinProfitPips.Text),
int.Parse(txtMaxProfitPips.Text));
chtMyRepeatedChart.DataBind();
}
Итак, я хочу заменить DB.MyRepeatedCall
, chtMyRepeatedChart
и передать их в качестве параметров универсальной функции. Это возможно? В моей форме много диаграмм, которые принимают одинаковое количество параметров.
Спасибо
UPDATE
Следуя решению Фредерика, я сделал это:
private delegate IEnumerable<DataTable> GetDataSource(
int TradeType,
string RepeatedTrades,
string Side,
string TradeSetup,
DataTable symbols,
string ChartTimeFrame,
int Hour,
int Year,
int Month,
int Day,
int NumSCs,
string DateFrom,
string DateTo,
DataTable TradeGrades,
DataTable ExecutionGrades,
int MinProfitPips,
int MaxProfitPips);
private void PopulateControl(Chart chart, GetDataSource getDataSource)
{
//DBUtil DB = new DBUtil();
DataTable symbols = GetSelectedItems("symbol", listSymbols);
DataTable tradeGrades = GetSelectedItems("tradeGrade", listTradeGrades);
DataTable executionGrades = GetSelectedItems("executionGrade", listExecutionGrades);
chart.DataSource = getDataSource(
int.Parse(ddlTradeTypes.SelectedValue),
ddlRepeatedTrades.SelectedValue,
radSide.SelectedValue,
ddlTradeSetups.SelectedValue,
symbols,
ddlChartTimeFrames.SelectedValue,
int.Parse(ddlHours.SelectedValue),
int.Parse(ddlYears.SelectedValue),
int.Parse(ddlMonths.SelectedValue),
int.Parse(ddlDays.SelectedValue),
int.Parse(ddlNumSCs.SelectedValue),
txtDateFrom.Text,
txtDateTo.Text,
tradeGrades,
executionGrades,
int.Parse(txtMinProfitPips.Text),
int.Parse(txtMaxProfitPips.Text));
chart.DataBind();
}
Я вызываю функцию с этой командой:
PopulateControl (chtEquityCurve, DB.GetAccountBalances());
Я получаю эту ошибку в intellisense:
No overload for method 'GetAccountBalances' takes 0 arguments.