InvalidOperationException in a foreach

本文关键字:foreach in InvalidOperationException | 更新日期: 2023-09-27 18:25:19

这是我的代码:

public static int getUnidades(List<int> lista)
{
    string conString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection SQLCon = new SqlConnection(conString);
    string SQLCom = "Select UnidadesCliente FROM Cliente WHERE @id = IdCliente";
    SqlCommand cmd = new SqlCommand(SQLCom, SQLCon);
    List<int> listaUnidades = lista;
    int t = 0;
    foreach(int i in lista)
    {
        cmd.Parameters.AddWithValue("@id", Convert.ToString(i));
        SQLCon.Open();
        listaUnidades[t] = Convert.ToInt32(cmd.ExecuteScalar());
        SQLCon.Close();
        t++;
    }
    int total = 0;
    foreach(int i in listaUnidades)
    {
        total = total + i;
    }
    return total;
}

我在foreach(int i in lista)循环中得到一个InvalidOperationException,说"集合已修改,枚举操作可能无法执行"。现在,我不相信我在修改集合,那么怎么了?

InvalidOperationException in a foreach

我不相信我在修改集合

实际上,List<T>是一个引用类型,listaUnidadeslista都指向同一个实例,因此在listaUnidades[t] =中,您正在修改迭代的同一集合。

只需将listaUnidades设为新的List<int>并调用Add(),而不使用索引器。