出错的代码如下
foreach (var item in 你定义的集合) { 这里是你写的对集合的操作语句; }
这个时候项目运行起来的过后,就会提示“集合已被修改,可能无法操作枚举类型” 这个错误
实例:
foreach (var item in nDtos)
{
if (item.PoStatus.ToString().ToUpper().Equals(PurchasePOSides_CR.POStatus.Combine.ToString().ToUpper()))
{
var nSqlQuery = $"select * from SRMPURCHASEPO_CR where combineflag='Yes' ";
var nResults = _sqlExecuter.SqlQuery(nSqlQuery).ToList();
nDtos.AddRange(nResults);
nDtos.Remove(item);
}
}
通常情况下,不要在枚举集合的操作,比如Foreach中去执行修改集合的操作,如果需要修改,应先使用ToArray()方法
foreach (var item in nDtos.ToArray())
{
if (item.PoStatus.ToString().ToUpper().Equals(PurchasePOSides_CR.POStatus.Combine.ToString().ToUpper()))
{
var nSqlQuery = $"select * from SRMPURCHASEPO_CR where combineflag='Yes' ";
var nResults = _sqlExecuter.SqlQuery(nSqlQuery).ToList();
nDtos.AddRange(nResults);
nDtos.Remove(item);
}
}
这样将枚举集合先进行ToArry()操作,将nDtos列表对象转换成数组对象,再进行修改操作不会对集合进行修改,改动的只是集合中元素的类容。