我刚刚注意到我在 ASP.NET 应用程序中重复了很多 C# 代码,因此想要创建一个通用方法。我有一系列这样的私有方法:
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
并将它们作为参数传递给通用函数。那可能吗?我的表单上有许多采用相同数量参数的图表。
Thanks
UPDATE按照 Frederik 的解决方案,我这样做了:
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());
我在智能感知中收到此错误:No overload for method 'GetAccountBalances' takes 0 arguments.