سؤال

وبعد تفكير عميق والنظر في التنفيذ ArrayList, ، شخصيا أريد حقا أن أقول لقد عفا عليه الزمن، وليس لدي أي سبب لاستخدام هذه الفئة بعد 2.0.ولكن بما أنه لم يتم وضع علامة عليه [Obsolete], هل هناك أي استخدام لم أكن أعرفه أفضل من استخدام فئة عامة؟إذا كانت الإجابة بنعم، يرجى إعطاء مثال.شكرًا.

يحرر لنأخذ List<T> على سبيل المثال، فإنه يوفر كافة وظائف ArrayList, ، وهو مكتوب بقوة.إذن متى نحتاج إلى الاستخدام ArrayList؟ربما في بعض الأحيان يكون أداء أفضل؟لا أعرف.وأنا أقدر إذا كنت تستطيع أن تريني شيئا خاصا ArrayList.

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

المحلول

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

من خلال تجربتي، فإن معظم الأنواع والأعضاء التي تم تصنيفها على أنها قديمة من قبل Microsoft تعتبر خطرة بشكل فعال في بعض النواحي، ويجب إصلاحها حقًا إذا كان لا يزال لديك قاعدة تعليمات برمجية تستخدمها.أثناء استخدام ArrayList إنه أمر مؤلم و(على الأقل من الناحية النظرية) عرضة لاكتشاف الأخطاء المتعلقة بالنوع في وقت التنفيذ بدلاً من وقت الترجمة، فإن النوع يؤدي وظيفته بشكل جيد بما فيه الكفاية...في كثير من الأحيان لا يوجد سبب مقنع لتغيير الكود الموجود.إنه نوع التغيير الذي كنت أفكر فيه عمومًا عندما كنت أعمل بالفعل على منطقة من التعليمات البرمجية التي كانت تستخدم ArrayList, ، بدلاً من البحث بنشاط عن كل استخدام له.

نصائح أخرى

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

لا يجب عليك استخدامه في التعليمات البرمجية الجديدة دون سبب وجيه.

إنها ليست "عفا عليها الزمن" في حد ذاتها.إنها "عفا عليها الزمن" باعتبارها '70 '80 أوائل عام 90 سيارة.لو كان علي أن أختار بين أ List<Object> و ArrayList هناك احتمال صغير جدًا لاستخدام ArrayList ...انسى ذلك...لا ينفذ IEnumerable<Object>, ، لذا لاستخدام Linq يجب أن أستخدم ملف OfType<Object>().

لجعل مثال:

var aaa = new ArrayList();
var aaaa = aaa.OfType<object>().Where(p => p != null);

var bbb = new List<object>;
var bbbb = bbb.Where(p => p != null);

أخيرًا قام شخص ما بالتصويت لصالح ردي، لذلك سأضيف شيئًا إليه :-)

لو سألت "هل ستستخدم أي مجموعة غير عامة" لكان ردي مختلفًا.ال جدول التجزئة لديه خاصية مثيرة للاهتمام:

يعد Hashtable آمنًا للاستخدام بواسطة سلاسل رسائل متعددة للقارئ وسلسلة كتابة واحدة.إنه آمن للاستخدام متعدد الخيوط عندما يقوم واحد فقط من الخيوط بإجراء عمليات الكتابة (التحديث)، مما يسمح بقراءات خالية من القفل بشرط أن يتم إجراء تسلسل للكتاب إلى Hashtable.

لذلك هناك أماكن حيث Hashtable ينبغي أن يكون أفضل من أ lock + Dictionary أو أ ConcurrentDictionary (ولكن يجب عليك قياسه)

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