如果未在复选框列表中选中所有复选框,则开始索引小于零

时间:2014-03-29 13:33:32

标签: c#

StringBuilder sbOccupation = new StringBuilder();
foreach (ListItem li in cblOccupation.Items)
{
    if (li.Selected)
    {
        sbOccupation.Append(li.Text);
        sbOccupation.Append(",");
    }
}
property.Occupation=sbOccupation.ToString().Remove(sbOccupation.ToString().LastIndexOf(","), 1);

2 个答案:

答案 0 :(得分:2)

如果没有选中复选框,则

li.Selected对每个

都是假的

li in cblOccupation.Items,然后

.LastIndexOf(","), 1)

以来产生错误

sbOccupation.Append(",");

从未发生过。

答案 1 :(得分:1)

如果sbOccuption没有附加任何内容,那么它将为空 - 因此LastIndexOf(',')将返回-1,这不是string.Remove的第一个参数。

鉴于您知道它始终是结果的最后一个字符,您可以使用:

if (sbOccuptation.Length > 0)
{
    // Trim the trailing comma
    sbOccupation--;
}
string text = sbOccupation.ToString();

但是,使用string.Join和LINQ:

会更简单
// This replaces *all* your code
property.Occupation = string.Join(",", cblOccuptation.Items 
                                                     .Cast<ListItem>()
                                                     .Where(li => li.Selected)
                                                     .Select(li => li.Text));

如果您使用的是.NET 3.5,则在ToArray来电之后,您需要拨打Select,但这很简单。