将循环变量附加到变量名称

时间:2015-06-09 08:47:55

标签: c# string for-loop iterator append

我有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();
}

编辑:很抱歉,似乎我没有提供足够的细节,我的问题引起了混乱。现在编辑。

3 个答案:

答案 0 :(得分:1)

您不能在运行时向变量名附加一个数字以神奇地引用新变量。你应该做的是:

定义一个界面:

public interface IFileBLO
{
    DataTable SelectFileForCSV();
}

File1BLOFile2BLO等全部实施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

的文件名