启动索引小于零,如果未选中复选框列表中的所有复选框

本文关键字:复选框 列表 小于 索引 如果 启动 | 更新日期: 2023-09-27 17:55:16

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

启动索引小于零,如果未选中复选框列表中的所有复选框

如果未选中复选框,则

li.Selected对于每个都是假的

li in cblOccupation.Items,然后

.LastIndexOf(","), 1)产生错误,因为

sbOccupation.Append(",");

从未发生过。

如果 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,则需要在Select调用后调用 ToArray,但这很简单。