【问题标题】:C# Returning a value from a loop at every iteration of the loop?C#在循环的每次迭代中从循环中返回一个值?
【发布时间】:2015-06-23 09:21:28
【问题描述】:

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

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;
} 

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

【问题讨论】:

  • 您需要返回一个集合,例如一个列表。您还可以在 yield return 构造的帮助下返回动态生成的 IEnumerable&lt;T&gt; 类型的集合。
  • yield return 是你想要的。

标签: c# .net for-loop return


【解决方案1】:

使用yield return 而不是return,只要该方法返回IEnumerable&lt;T&gt;,其中T 是您想要产生的类型。它将产生一个返回项目序列的方法,并为您yield return 的每个项目添加一个项目到该序列中。

【讨论】:

  • 您能否详细说明如何准确使用 IEnumerables?
  • @AndrewDahdouh 如果您只是在寻找有关它的一般信息,那么从文档开始。您对此有什么具体问题吗?
【解决方案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

【讨论】:

  • 我试图把它改成说 yield return....它摆脱了一些错误,但又导致了另一个错误。这是说方法的主体不能是迭代器块,因为'object'是迭代器接口类型?
  • 您是否将方法的返回类型设置为 IEnumerable?也许您可以发布整个方法以减轻支持。
  • 我试图把它改成说 yield return....它摆脱了一些错误,但又导致了另一个错误。是说方法的主体不能是迭代器块,因为“对象”是迭代器接口类型?定义此 for 循环的方法被声明为公共对象。
  • 我真的不知道 IEnumberable 字符串是什么...?
  • 在我的帖子中添加了一些 IEnumerable 基础知识的链接
最近更新 更多