4

プロパティが変更された顧客オブジェクトを受け取るメソッドがあり、そのオブジェクトの古いバージョンを置き換えてメイン データ ストアに保存したいと考えています。

以下でこれを行うための疑似コードを記述する正しい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);
    }
4

1 に答える 1

3

最も効率的なのは、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して位置を取得し、インデクサーを使用してそれを更新します。もう少し危険ですが、スキャンは 1 回だけです。

    int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
    customers[index] = customer;
于 2009-04-30T12:08:00.947 に答える