var altColorList = itemimagelist.Select(z => z.Alt).Distinct();
foreach (var color in altColorList)
{
var colorImageNum = 0;
foreach (var productImage in itemimagelist.Where(z => z.Alt.Trim().Contains(color.Trim())))
{
colorImageNum++;
var newAlt = $"{altName}-{Regex.Replace(color.Trim(), pattern, replacement)}-{colorImageNum:D3}";
productImage.Alt = newAlt.Trim();
}
}
List<string> altColorList = itemimagelist.Select(z => z.Alt).Distinct().ToList();
foreach (var color in altColorList)
{
var colorImageNum = 0;
foreach (var productImage in itemimagelist.Where(z => z.Alt.Trim().Contains(color.Trim())))
{
colorImageNum++;
var newAlt = $"{altName}-{Regex.Replace(color.Trim(), pattern, replacement)}-{colorImageNum:D3}";
productImage.Alt = newAlt.Trim();
}
}
第一段代码:查询出来的是IEnumerable直接参与循环
第一段代码:查询出来后通过ToList()转为List后参与循环
问题:
两段代码处理后的结果不一致
原因:
第二个foreach循环的代码中有修改itemimagelist的Alt操作,影响了第一个foreach循环
第一段代码:IEnumerable会延迟执行,所以在第一个foreach循环的表达式每次都会重新执行一次.由于第二个foreach循环会修改itemimagelist的Alt,导致了第一个foreach循环的表达式存在不相同的情况.
第二段代码:List存储在内存中,不会重复执行.所以保存了第一个foreach循环的表达式不会变化.