728x90
//서버에서 삭제된 세차기 flaMain에서 삭제
List<string> list = new List<string>();
List<string> list2 = new List<string>();
//flpMain 에 등록된 세차기, 서버에 등록된 세차기 리스트에 대입
foreach (CarWash_Info_Card carWash_Info_Card in flpMain.Controls) list.Add(carWash_Info_Card.Name);
foreach (DocumentSnapshot documentSnapshot in allQuerySnapshot.Documents) list2.Add(documentSnapshot.Id);
//flpMain, 서버 등록된 세차기 비교 해서 중복되지 않는 항목 반환
var carWashExcept = carWash_Info_Card_List.Except(documentSnapshot_List);
//서버에 등록 안된 세차기 삭제
this.BeginInvoke((System.Action)(() =>
{
foreach (var item in carWashExcept.ToList()) //ToList 안붙여주면 에러 남, 중복 안되는 항목 반복문
{
foreach (CarWash_Info_Card carWash_Info_Card in flpMain.Controls) //flpMain에 등록된 것 중에 비교
{
if (carWash_Info_Card.Name == item) //중복 안된 항목과 같으면 삭제
{
flpMain.Controls.Remove(carWash_Info_Card);
rtbErorrStatus.AppendText($"carWashRemove: {carWash_Info_Card.Name} \r\n");
}
}
}
}));
Except() 는 Interesect() 연산의 반대 개념인 같지 않은 것을 반환 한다.
carWash_Info_Card_List.Except(documentSnapshot_List); 반환 된 값을 foreach 돌리면
'Collection was modified; enumeration operation may not execute' 에러가 난다.
이때, .Tolist()를 추가 하면 에러가 해결 된다.
아래 링크에 왜 에러가 나고 이렇게 사용 해야 하는지 나와있다.
stackoverflow.com/questions/604831/collection-was-modified-enumeration-operation-may-not-execute
728x90
'C#' 카테고리의 다른 글
C# / Usercontrol 에서 Form 으로 데이터 전달 (0) | 2021.03.30 |
---|---|
C# / 배열(List) 같은지 다른지 비교, SequenceEqual(), Sort() (0) | 2021.03.29 |
C# Winform, 윈폼 / Form, 폼 위에 마우스 있는지 없는 지, 컨트롤 여러 개 있어도 확인 하기 (0) | 2021.03.26 |
C# 정규식 지정, 특정 문자만 입력, Regex.IsMatch (0) | 2021.03.23 |
c# using MAC Address / 맥주소 받아오기 / 사용중인 맥주소 받아오기 (0) | 2021.03.08 |