C#在循环的每次迭代中从循环返回一个值?

时间:2015-04-16 18:59:32

标签: c# .net for-loop return

我现在正在处理一个程序,我想知道是否有可能返回每个循环中生成的对象/值/变量的返回函数?下面是我想要的代码。我唯一的错误是返回值。

for (int i = 1; i < ProductArray.Length; i++)
{
    Label lbl = new Label();
    ThresholdPanel.Controls.Add(lbl);
    lbl.Top = A * 28;
    lbl.Left = 15;
    lbl.Font = new Font(lbl.Font, FontStyle.Bold);
    lbl.Text = ProductArray[i];
    lbl.Name = "Label" + ProductArray[i];

    TextBox txt = new TextBox();
    ThresholdPanel.Controls.Add(txt);
    txt.Top = A * 28;
    txt.Left = 125;
    //txt.Text = "Text Box All" + this.A.ToString();
    txt.Name = "txt" + A;
    textBoxes[txt.Name] = txt;
    A = A + 1;

    return txt;
    return lbl;
} 

提前致谢,如果这真的是一个简单的问题,我很抱歉......

2 个答案:

答案 0 :(得分:4)

使用yield return代替return,只要该方法返回IEnumerable<T>,其中T是您想要产生的类型。它将生成一个返回一系列项目的方法,并为yield return的每个项目为该序列添加一个项目。

答案 1 :(得分:2)

使用收益率返回,如提供的样本:

IEnumerable<string> Test()
{
    for (int i = 1; i < ProductArray.Length; i++)
    {
        Label lbl = new Label();
        ThresholdPanel.Controls.Add(lbl);
        lbl.Top = A * 28;
        lbl.Left = 15;
        lbl.Font = new Font(lbl.Font, FontStyle.Bold);
        lbl.Text = ProductArray[i];
        lbl.Name = "Label" + ProductArray[i];

        TextBox txt = new TextBox();
        ThresholdPanel.Controls.Add(txt);
        txt.Top = A * 28;
        txt.Left = 125;
        //txt.Text = "Text Box All" + this.A.ToString();
        txt.Name = "txt" + A;
        textBoxes[txt.Name] = txt;
        A = A + 1;

        yield return txt;
    }
}

有关IEnumerable

的更多详情