我刚刚注意到我在我的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
并将它们作为参数传递给一个通用函数。这可能吗?我的表单上有许多图表,它们都需要相同数量的参数。
谢谢
更新 根据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());
我在Intellisense中看到了这个错误:
GetAccountBalances方法没有重载可以不传参数。