ما هي الطريقة الأكثر فعالية لتحديد واستبدال كائن ضمن ObservableCollection؟

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