【问题标题】:C# for loop. Index was outside the boundsC# for 循环。索引超出范围
【发布时间】:2019-04-17 08:07:41
【问题描述】:

我收到以下错误:

索引超出了数组的范围

for循环代码:

for (int i = 0; i < listEquipment.Items.Count - 1; i++)
{
   SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[EquipmentItems] ([RequestID], [TypeID]) VALUES (@RequestID, @TypeID)", conn);
   cmd.Parameters.Add("@RequestID", SqlDbType.Int).Value = userRequest;
   cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = (listEquipment.SelectedItems[i] as Equipment).equipmentID;
   cmd.ExecuteNonQuery();
}

有错误的那一行:

cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = (listEquipment.SelectedItems[i] as Equipment).equipmentID;

请帮忙!我是编程新手。

【问题讨论】:

  • listEquipment.Items.Count >= listEquipment.SelectedItems.Count
  • 你能把你的物品展示在listEquipment里面吗?
  • 另外,我猜你想循环所有,所以使用i &lt; listEquipment.Items.Count

标签: c#


【解决方案1】:

您循环所有项目,然后访问listEquipment.SelectedItems[i] 中的索引。但可能并非所有项目都被选中,这意味着此集合较小,您无法访问它。

所以我假设你不想循环所有项目,但只循环选择,所以使用:

for (int i = 0; i < listEquipment.SelectedItems.Count; i++)
{

}

【讨论】:

    【解决方案2】:

    改变

    for (int i = 0; i < listEquipment.Items.Count - 1; i++)
    

     for (int i = 0; i < listEquipment.SelectedItems.Count; i++)
    

    【讨论】:

    • 谢谢。我已经做出改变了
    【解决方案3】:

    您正在寻找这样的东西(让我在下面的代码中通过 cmets 进行解释):

      //DONE: make sql readable 
      string sql = 
        @"INSERT INTO [dbo].[EquipmentItems] (
            [RequestID], 
            [TypeID]) 
          VALUES (
            @RequestID, 
            @TypeID)";
    
      // Create command once - use many (within the loop)
      //DONE: wrap IDisposable into using  
      using (SqlCommand cmd = new SqlCommand(sql, conn)) {
        // user request is the same for all the equipment
        cmd.Parameters.Add("@RequestID", SqlDbType.Int).Value = userRequest;
        cmd.Parameters.Add("@TypeID", SqlDbType.Int);
    
        //DONE: foreach + OfType<> is by far more readable in the context: 
        //     "for each selected equipment execute a query"
        foreach (Equipment equipment in listEquipment.SelectedItems.OfType<Equipment>()) {
          cmd.Parameters["@TypeID"].Value = equipment.equipmentID;
    
          cmd.ExecuteNonQuery();
        } 
      }
    

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2013-11-25
      • 2017-08-09
      • 1970-01-01
      • 2021-09-02
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多