一、foreach循环中尝试修改枚举的值。
如下代码,会出现异常 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestForeachDemo
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("修吾", "长剑");
dict.Add("月清疏", "轻剑");
dict.Add("白茉晴", "灵符");
dict.Add("桑游", "弓弩");
try
{
foreach (string key in dict.Keys)
{
string sourceValue = dict[key];
if (key == "修吾")
{
dict[key] = "羲和";
}
else if (key == "月清疏")
{
dict[key] = "望舒";
}
Console.WriteLine($"Key:【{key}】,原值【{sourceValue}】,当前值【{dict[key]}】");
}
}
catch (Exception ex)
{
Console.WriteLine($"出现异常:{ex.Message}");
}
Console.ReadLine();
}
}
}
二、程序运行出现异常,如截图:
三、因foreach的只读操作,如果在迭代中修改枚举内容可能导致异常【集合已修改,可能无法执行枚举操作】,可以修改为for循环来替代它。
修改后程序如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestForeachDemo
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("修吾", "长剑");
dict.Add("月清疏", "轻剑");
dict.Add("白茉晴", "灵符");
dict.Add("桑游", "弓弩");
try
{
//以下注释代码抛出异常【集合已修改,可能无法执行枚举操作】
/*
foreach (string key in dict.Keys)
{
string sourceValue = dict[key];
if (key == "修吾")
{
dict[key] = "羲和";
}
else if (key == "月清疏")
{
dict[key] = "望舒";
}
Console.WriteLine($"Key:【{key}】,原值【{sourceValue}】,当前值【{dict[key]}】");
}
*/
for (int i = 0; i < dict.Keys.Count; i++)
{
string key = dict.Keys.ElementAt(i);
string sourceValue = dict[key];
if (key == "修吾")
{
dict[key] = "羲和";
}
else if (key == "月清疏")
{
dict[key] = "望舒";
}
Console.WriteLine($"Key:【{key}】,原值【{sourceValue}】,当前值【{dict[key]}】");
}
}
catch (Exception ex)
{
Console.WriteLine($"出现异常:{ex.Message}");
}
Console.ReadLine();
}
}
}