我有5个需要转换为TXT文件的DataTable。我没有单独创建它们,而是认为我使用for
循环。这是我的代码:
StringBuilder sb = new StringBuilder();
for (int i = 1; i < 5; i++)
{
DataTable dtFile1 = file1BLO.SelectFile1ForCSV()
foreach (DataRow dr in dtFile1.Rows)
{
string[] fields = dr.ItemArray.Select(field => field.ToString()).ToArray();
sb.AppendLine(string.Join("|", fields) + "|");
}
Response.ContentType = "application/text";
Response.AddHeader("content-disposition", "attachment;filename=CAPRES-FILE1-"
+ DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt");
Response.Output.Write(sb);
Response.Flush();
Response.End();
sb.Clear();
}
我希望将迭代器附加到变量名称和方法。像这样DataTable dtFile + i = file + i + BLO.SelectFile + i + ForCSV();
谢谢!
SelectFile1ForCSV()
的请求代码public DataTable SelectFile1ForCSV()
{
return file1DAO.SelectFile1ForCSV();
}
编辑:很抱歉,似乎我没有提供足够的细节,我的问题引起了混乱。现在编辑。
答案 0 :(得分:1)
您不能在运行时向变量名附加一个数字以神奇地引用新变量。你应该做的是:
定义一个界面:
public interface IFileBLO
{
DataTable SelectFileForCSV();
}
让File1BLO
,File2BLO
等全部实施IFileBLO
并修复方法名称,使其全部为SelectFileForCSV
而不是SelectFile1ForCSV
等。
添加查找以引用这些对象:
var bloList = new IFileBLO[]
{
file1BLO, file2BLO, file3BLO, file4BLO, file5BLO
};
最后,将你的循环改为:
for (int i = 0; i < 5; i++)
{
var dtFile = bloList[i].SelectFileForCSV();
foreach (var dr in dtFile.Rows)
{
...
答案 1 :(得分:1)
问题中没有足够的信息可以确切地知道问题是什么,所以我只是在这里猜测。你的问题是你有五个对象,都有一个方法,这些方法有不同的名称。但是,方法返回相同的东西,DataTable
,可以在循环中使用。
如果是这种情况,那么只需取出不同的循环,这样在循环中保持相同的循环。像这样:
DataTable[] fiveTables =
{
file1BLO.SelectFile1ForCSV(),
file2BLO.SelectFile2ForCSV(),
file3BLO.SelectFile3ForCSV(),
file4BLO.SelectFile4ForCSV(),
file5BLO.SelectFile5ForCSV()
}
for (int i = 1; i <= 5; i++)
{
// Use fiveTables[i] for DataTable, and i for file name
}
答案 2 :(得分:0)
使用此:
Response.AddHeader("content-disposition", "attachment;filename=CAPRES-FILE"
+ i
+ "-"
+ DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt");
这将创建一个包含值i
。