2017-02-21 16 views
0
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-й раз, он разбился.Необработанное исключение типа «System.InvalidOperationException» произошло в mscorlib.dll

за исключением деталей говорит { «Коллекция была изменена, операция перечисления не может выполнить.»}

+0

не делать 'userSelection.Add()' в то время как вы находитесь в середине делает 'foreach' – MickyD

+0

как еще я могу добавить их т o Список для использования позже? –

ответ

0

Вы не можете редактировать коллекцию в то время как вы итерацию через него с петлей Еогеасп

хак будет перебирать копию вашей коллекции:

foreach (var addedUser in userSelection.ToArray())

и сохранить тот же код

-1

вы можете использовать LINQ, чтобы проверить, если c.name в userSelection

if(!userSelection.Exists(u => u.Contains(c.name))) userSelection.Add(c.name);

, конечно, нужно using System.Linq

+0

почему это голос? –

1

Вы можете добавлять пользователей в список темп и добавить этот список временный к первоначальному списку в конце:

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);