将循环变量附加到变量名
本文关键字:变量名 循环 变量 | 更新日期: 2023-09-27 17:54:25
我有5个需要转换为TXT文件的数据表。而不是分别创建它们,我认为我使用一个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();
}
编辑:我很抱歉,似乎我没有提供足够的细节,我的问题引起了混乱。现在编辑。
您不能在运行时仅仅在变量名后面附加一个数字来神奇地引用一个新变量。你应该做的是:
定义一个接口:
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)
{
...
问题中没有足够的信息来确切知道问题是什么,所以我在这里只是猜测。你的问题是你有五个对象,它们都有一个方法,这些方法有不同的名字。但是,这些方法返回的是同样的东西,即可以在循环中使用的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
}
使用
Response.AddHeader("content-disposition", "attachment;filename=CAPRES-FILE"
+ i
+ "-"
+ DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt");
这将创建一个包含i
值的文件名。