다음 코드가 있습니다.컬렉션 변경을 반복하는 방법
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);
에서 변경됩니다. 따라서이 메소드를 호출 할 때마다 콜렉션 값이 증가하고 있습니다. 하지만 처음에는 잘 작동합니다. 그러나 두 번째로 iterating 동안 그것은 예외를주고있다
컬렉션이 수정되었습니다; 열거 연산이 실행되지 않을 수 있습니다.
이 예외는 컬렉션을 변경하기위한 것입니다. 이 상황을 어떻게 처리할까요?
내 클래스 정의는 다음과 같습니다.
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