관측형 수집 내에서 물체를 식별하고 교체하는 가장 효율적인 방법은 무엇입니까?
-
03-07-2019 - |
문제
속성을 변경 한 고객 객체를 수신하는 메소드가 있으며 해당 객체의 이전 버전을 대체하여 기본 데이터 저장소에 다시 저장하려고합니다.
아래에이를 수행하기 위해 의사 코드를 작성하는 올바른 C# 방법을 아는 사람이 있습니까?
public static void Save(Customer customer)
{
ObservableCollection<Customer> customers = Customer.GetAll();
//pseudo code:
var newCustomers = from c in customers
where c.Id = customer.Id
Replace(customer);
}
해결책
그만큼 가장 효율적입니다 LINQ를 피하는 것입니다; -p
int count = customers.Count, id = customer.Id;
for (int i = 0; i < count; i++) {
if (customers[i].Id == id) {
customers[i] = customer;
break;
}
}
LINQ를 사용하려면 : 이것은 이상적이지 않지만 적어도 작동합니다.
var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
customers[customers.IndexOf(oldCust)] = customer;
ID (LINQ 사용)로 찾은 다음 사용합니다. IndexOf
위치를 얻고 인덱서가 업데이트됩니다. 조금 더 위험하지만 단 하나의 스캔 :
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;
제휴하지 않습니다 StackOverflow