관측형 수집 내에서 물체를 식별하고 교체하는 가장 효율적인 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/806548

  •  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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top