안녕하세요.
사이트는 자주 방문하여 좋은 정보를 많이 얻었으나, 이렇게 문의 글을 올리는 것은 처음이네요.
응용프로그램 개발을 하는 중에 추가하고 싶은 기능이 생겨 함수를 작성하였는데,
생각처럼 동작이 되질 않았습니다. 디버깅을 통해 해결을 하였으나, 왜 그런지에 대한 이유를 알고싶어 문의를 드리게 되었습니다.
(개발환경은 Visual Studio 2019 , .NET Framework 4.7.2 입니다.)
아래의 내용은 xml 파일 내용을 읽어들이며 Dictionary 에 저장하는 함수인데,
foreach 문의 Loop 를 도는 중에 pcblist.Clear() 가 호출될 경우에는 Dictionary에 저장한 list 자료가 남아있지만,
foreach 문 Loop 마지막에서 pcblist.Clear() 호출될 경우에는 이미 저장한 Dictionary의 list 자료까지 모두 Clear가 됩니다.
public bool LoadDictionary()
{
string path = Path.Combine(DataRootPath, "MagazineDictionary.xml");
XDocument xdoc = XDocument.Load(path);
List<PCB> pcbList = new List<PCB>(16);
int pcbCount = 0;
int magzineCount = xdoc.Descendants("Magazine").Count();
if (magzineCount == 0)
{
return false;
}
foreach (XElement elem in xdoc.Descendants().Where(a => !a.HasElements))
{
var pcb = new PCB()
{
ID = elem.Attribute("ID").Value,
No = elem.Attribute("No").Value,
Status = Convert.ToInt32(elem.Attribute("Status").Value)
};
pcbList.Add(pcb);
pcbCount++;
if (pcbCount != 16)
{
continue;
}
if (!MD.ContainsKey(elem.Parent.Attribute("ID").Value))
{
MD.Add(elem.Parent.Attribute("ID").Value, new MGZ()
{
ID = elem.Parent.Attribute("ID").Value,
No = elem.Parent.Attribute("No").Value,
PCB_List = pcbList
});
}
pcbCount = 0;
pcbList.Clear();
}
return true;
}
MD 라는 Dictionary 에 저장한 Data 가 3개라면, 2개까지는 모두 정상적으로 Dictionary 에 저장됩니다.
마지막 3번째 Data 를 저장하고, list.Clear() 가 호출된 후 foreach 문을 빠져나오면 Dictionary 에 저장되어있는
PCB_List 가 모두 삭제가 됩니다.
프로그램을 시작한지 얼마되지 않아 많이 부족하네요.
이유에 대한 설명 좀 부탁드리겠습니다.
감사합니다.
[최초 등록일: ]
[최종 수정일: 11/21/2021]