![](/img/trans.png)
[英]List.Sort() throws An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll - C#
[英]An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
private void findManagerForSelectedDate(String dateSelected)
{
dateSelected = dateTimePicker1.Value.ToShortDateString();
List<String> managerNames = new List<String>();
foreach(var item in managers)
{
foreach (var subitem in item)
{
CalendarModel c = subitem;
Console.WriteLine(c.date);
c.name = new CultureInfo("en-US", false).TextInfo.ToTitleCase(c.name);
if (userSelection.Count > 0)
{
foreach (var addedUser in userSelection)
// Crashing here with An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
{
if (!addedUser.Contains(c.name))
{
userSelection.Add(c.name);
}
}
} else
{
userSelection.Add(c.name);
}
它能够遍历我的列表3次,然后在第4次崩溃。
异常详细信息显示{“集合已被修改;枚举操作可能无法执行。”}
您可以将用户添加到临时列表中,然后将此临时列表添加到原始列表的末尾:
private void findManagerForSelectedDate(String dateSelected)
{
dateSelected = dateTimePicker1.Value.ToShortDateString();
List<string> tempUsersToAdd = new List<string>();
List<String> managerNames = new List<String>();
foreach(var item in managers)
{
foreach (var subitem in item)
{
CalendarModel c = subitem;
Console.WriteLine(c.date);
c.name = new CultureInfo("en-US", false).TextInfo.ToTitleCase(c.name);
if (userSelection.Count > 0)
{
foreach (var addedUser in userSelection)
{
if (!addedUser.Contains(c.name))
{
tempUsersToAdd.Add(c.name);
}
}
}
else
{
tempUsersToAdd.Add(c.name);
}
}
}
userSelection.AddRange(tempUsersToAdd);
使用foreach循环遍历集合时,无法编辑它
骇客就是要遍历您收藏的副本:
foreach (var addedUser in userSelection.ToArray())
并保持相同的代码
您可以使用linq来测试c.name
是否在userSelection中
if(!userSelection.Exists( u => u.Contains(c.name))) userSelection.Add(c.name);
当然您需要using System.Linq
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.