foreach循环问题

时间:2011-03-02 16:59:02

标签: c# foreach

是否有其他更短/更有效的方法来检查它是否是我的ListBox中的最后一项?这里的主要目标基本上是将所选项添加到标签中,并在每一个之后添加一个逗号,但最后一个。有什么建议吗?

        int sc = 0;
        List<string> interestitems = new List<string>();

        foreach (ListItem siitem in ListBox1.Items)
        {
            if (siitem.Selected == true)
            {
               interestitems.Add(siitem.Value.ToString());
            }
        }

        foreach (string inteitem in interestitems)
        {
            Label1.Text += inteitem;
            sc++;
            if (sc < interestitems.Count)
            {
                Label1.Text += ",";
            }
        }

5 个答案:

答案 0 :(得分:11)

而不是你的第二个循环,只需使用:

Label1.Text = string.Join("," , interestitems);

<强> P.S。

如果您使用的是.net 3.5,则需要将一个字符串数组传递给string.Join(),然后:

Label1.Text = string.Join("," , interestitems.ToArray());

修改

如果您想完全避免循环,请执行以下操作:

var selItems = ListBox1.Items.Cast<ListItem>()
                       .Where(item => item.Selected)
                       .Select(item => item.ToString());

Label1.Text = string.Join("," , selItems);

答案 1 :(得分:2)

LINQ怎么样:

Label1.Text = string.Join(
    ",", 
    ListBox1.Items
            .OfType<ListItem>()
            .Where(item => item.Selected)
            .Select(x => x.Value.ToString())
            .ToArray()
);

答案 2 :(得分:0)

您可以用一些LINQ替换所有代码:

Label1.Text = String.Join(", ",
              ListBox1.Items.Cast<ListItem>()
                            .Where(i => i.Selected)
                            .Select(i => i.Value.ToString())
              );

在.Net 3.5中,您需要添加.ToArray()

答案 3 :(得分:0)

我相信你可以这样做:

interestitems.IndexOf(inteitem);

Altought它使我与其他项目类型,可能会给你一个想法。我没有检查它是否适用于字符串。

你只需要删除最后一个,用索引检查是否是最后一个有interestitems.Count

答案 4 :(得分:0)

为什么不在第一个循环中迭代时构建字符串

var builder = new StringBuilder();
var first = true;
foreach (var item in ListBox1.Items) {
  if (item.Selected) {
    if (!first) {
      builder.Append(", ");
    }
    first = false;
    builder.Append(item.Value.ToString());
  }
}

Label1.Text = builder.ToString();