سؤال

عند تعداد مجموعة .NET، MSDN الدول الذي - التي:

لا يزال العداد ساري المفعول طالما بقيت المجموعة دون تغيير. إذا تم إجراء التغييرات على المجموعة، مثل إضافة أو تعديل أو حذف العناصر، فإن العداد غير قابل للإلغاء بشكل لا يصدق وسلوكه غير محدد.

ماذا يعني بالضبط "إبطال بشكل لا يريء"؟

خذ شجرة ثنائية على سبيل المثال، مع المراجع إلى أسفل الأطفال إلى اليسار واليمين، وأيضا الوالدين. في مثل هذه الشجرة، يعد إشارة واحدة إلى عقدة واحدة في الشجرة كافية للتنقل عبر الشجرة حيث يمكنك بسهولة العثور على العقدة التالية في الشجرة منه.

لذلك مع هذه الشجرة، لنفترض أنني أزل بعض العقدة الأخرى (من المفترض أن لا أزيل العقدة التي أجلها حاليا)، هل ما زلت أبطل العداد؟ لاحظ أنني لا أتحدث عن عملية متعددة الخيوط هنا، فقط موضوع واحد تشغيل حلقة، وتعديل المجموعة داخل جسم الحلقة.

هل هذا "القانون" حقا، وهو قانون، حتى لو كان العداد استطاع استمر، لا ينبغي ذلك؟

هل كانت مفيدة؟

المحلول

هل هذا "القانون" حقا، وهو قانون، أنه حتى لو كان العفور قد يستمر، لا ينبغي ذلك؟

شخصيا، أعتقد أن وجود رمي العداد الخاص بك، حتى لو كان من الناحية النظرية قد تستمر، هو ممارسة جيدة.

في كثير من الأحيان، وضع الناس بشكل غير قصد على التعليمات البرمجية التي يغير مجموعة داخل حلقة foreach. دون القيام بذلك، قد لا يكون رمي في المثيل المحدد الذي يختبره المطور حاليا، ولكن حالة وقت تشغيل مختلف يمكن أن يجعلها بسهولة رميها.

من خلال إلقاء دائما، فأنت تجبر المطور على علاج الكود الخاص بك نفس مجموعات الإطار والمعدادات، والتي أعتقد أنها شيء جيد، لأنه يقلل من مستوى المفاجأة عند التعامل مع مكتبتك.

نصائح أخرى

إن تنفيذ عداد التحصيل القياسي يجعلها قانونا. عند إنشاءها، فإنها نسخ عدد صحيح "إصدار" خاص من كائن المجموعة. تعديل زيادات المجموعة التي الإصدار. مقارنة أساليب المؤتمرات مقارنة الإصدار وعندما يكون هناك عدم تطابق رمي. لا توجد وسيلة لتحصل حول ذلك.

ومع ذلك، هناك فئة مجموعة واحدة تسمح بتعديل المجموعة أثناء تعدادها: Microsoft.VisualBasic.Collection. هناك حاجة للقيام بذلك للبقاء متوافق مع فئة مجموعة VB6. قد ترغب في إلقاء نظرة عليه لمعرفة كيف يتم ذلك. IIRC، فإنه يحتفظ بضعف على جميع المتسابقين، ثم قم بتحديث المحامي عند تعديل المجموعة. هذا ليس دليلا كذبة بالطبع، وإزالة عنصر وإضافةه مرة أخرى في يمكن أن تعداد نفس الكائن مرتين. ولا هو رخيص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top