2017-02-21 7 views
0
4回目に3回、その後、私のリストを通して反復処理することができました
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); 
       } 

で発生し、それが墜落しました。 未処理の例外がmscorlib.dllが

例外の詳細

が、{「コレクションが変更された。列挙操作が実行されないことがあります。」}と言うあなたは、foreachループ

ハックでそれを反復しながら、

+0

私は彼らにトンをどのように他を追加することができますあなたがやっての真ん中にありながら、 'userSelection.Addは()' ' – MickyD

+0

をforeach'しないでくださいo後で使用するためのリスト? –

答えて

0

あなたは、コレクションを編集することはできませんあなたのコレクションのコピーを反復処理するために、次のようになります。

foreach (var addedUser in userSelection.ToArray())

と同じコードを維持

-1

あなたはc.nameがuserSelectionにある場合、あなたはあなたが一時リストにユーザーを追加し、元のリストに、この一時リストを追加することができますusing System.Linq

+0

なぜこれがダウン投票ですか? –

1

必要

もちろんのif(!userSelection.Exists(u => u.Contains(c.name))) userSelection.Add(c.name);

テストするためにLINQを使用することができます最後に:

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); 
関連する問題