2012-08-29 77 views
2

我試圖使用遞歸去了一個層次,我得到這個錯誤:C#遞歸 - 「集合被修改;枚舉操作可能不會執行」

Collection was modified; enumeration operation may not execute. 

我在這裏的假設是,當它進入該函數每次都使用相同的parentRolesCopy而不是一個不同的函數,因此當它第二次進入時,它會改變parentRolesCopy在原始函數調用中的不同。

我該如何解決這個問題?

private IEnumerable<string> GetAllParentRoles(string role) 
    { 
     // GET EACH PARENT ROLE 
     var parentroles = //code that gets any parents of the role passed in 


     //RECURSIVELY CALL THIS FUNCTION TO KEEP GETTING PARENTS OF PARENT ROLES UNTIL NONE LEFT 
     var parentRolesCopy = parentroles; 
     foreach (var parentrole in parentRolesCopy) 
     { 
      parentroles.AddRange(GetAllParentRoles(parentrole)); 
     } 

     return parentroles; 
    } 
+2

您只複製參考。他們都指向相同的實際收藏。 –

回答

4

您可以複製實際上是一個副本,而不是僅僅指向同一個參考。一種方法是:

var parentRolesCopy = parentroles.ToArray(); 
+0

啊,謝謝!我沒有意識到我在做什麼只是提到原文。 – Kyle

2

您可以使用List或一些其他集合

var parentRolesCopy = new List<string>(parentroles); 
相關問題