我有以下代碼。如何迭代通過更改集合
private void LoopThroughDependsIssues(JIRAOperations jiraOps, string jiraURL, string token, string username, string password, string projectKey, string exportTargetPath, string branch, SVNOperations svnOps, string svnExePath, string changesetDBFile, DependencyManager mgr)
{
var tempVar = mgr.Dependencies;
foreach (var item in tempVar)
{
if (item.depends.Length > 0)
{
var templist = item.depends;
var listissues1 = templist.Split(',');
for (var i = 0; i < listissues1.Length-1; i++)
{
var newissue1 = new string[] { listissues1[i].ToString() };
newissue1.getChangeSet(jiraOps, jiraURL, token, username, password, projectKey, exportTargetPath, branch, svnOps, svnExePath, changesetDBFile, mgr);
}
//throw new Exception("Dependencies found");
}
}
}
在此,我正在迭代通過mgr.Dependencis
集合。此值在newissue1.getChangeSet(jiraOps, jiraURL, token, username, password, projectKey, exportTargetPath, branch, svnOps, svnExePath, changesetDBFile, mgr);
中變化因此,對於此方法的每次調用,我的收集值都在增加。但第一次它工作正常。但在第二次迭代時,它給予例外,如
收集被修改;枚舉操作可能不會執行。
我認爲這個例外即將改變集合。如何處理這種情況。
我的班級定義如下。
public class Dependency
{
public string issueID { get; set; }
public string jirastatus { get; set; }
public int dependencyFound { get; set; }
public string depends { get; set; }
public string linked_issues { get; set; }
}
public class DependencyManager
{
public List<Dependency> Dependencies { get; private set; }
public DependencyManager()
{
this.Dependencies = new List<Dependency>();
}
}
您可以將迭代器包裝在一個對象中,該對象可以檢查並檢測對基礎集合的更改。但是這比它的價值更麻煩。你最好不要爲此煩惱,而且在迭代時不要修改集合。 –
@ Jeff ..但需要在這裏添加新的值。爲了增加新的值,它應該再次運行循環。 – Searcher
這聽起來像是你想要一次做太多。考慮將其分解成兩個函數 - 一個是將依賴關係提取到一個簡單的ID字符串列表,另一個函數將ID列表中的項目加載到列表中。 – overslacked