是否有其他更短/更有效的方法来检查它是否是我的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 += ",";
}
}
答案 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();