سؤال

رأيت هذا الرد من جون تهيئة كائن عام مع نوع غير معروف:

إذا كنت تريد مجموعة واحدة لاحتواء أنواع متعددة غير ذات صلة من القيم، فسيتعين عليك استخدامها List<object>

أنا لا تقارن ArrayList ضد List<>, ، لكن ArrayList ضد List<object>, ، كما كلاهما سيكون فضح عناصر من النوع object. وبعد ماذا ستكون فائدة استخدام أي واحد في هذه الحالة؟

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

تحرير: شكرا Marc Gravell وشون للإجابة. آسف، لا أستطيع فقط اختيار 1 كإجابة، لذلك أنا سوف التصويت على حد سواء.

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

المحلول

ستتمكن من استخدام أساليب ملحق LinQ مباشرة مع List<object>, ، ولكن ليس مع ArrayList, ، إلا إذا قمت بحقن Cast<object>() / OfType<object> (شكرا ل IEnumerable<object> ضد IEnumerable). هذا يستحق قليلا، حتى لو كنت لا تحتاج إلى نوع السلامة وما إلى ذلك.

ستكون السرعة بنفس الطريقة؛ ستظل الهياكل محاصر، إلخ - لذلك ليس هناك الكثير لتخبرهم. إلا أنني أميل إلى رؤية ArrayList كما "عفوا، شخص ما يكتب قانون قديم مرة أخرى ..." ؛-P

نصائح أخرى

فائدة واحدة كبيرة لاستخدام List<object> هل هذه الأيام تتم كتابة معظم الكود لاستخدام الفئات / الواجهات العامة. أظن أن معظم الأيام سيكتب معظم الناس طريقة تأخذ IList<object> بدلا من IList. وبعد حيث ArrayList لا ينفذ IList<object> لن تتمكن من استخدام قائمة صفيف في هذه السيناريوهات.

أميل إلى التفكير في الطبقات / الواجهات غير العامة كصنونة إرث وتجنبها كلما أمكن ذلك.

في هذه الحالة، ArrayList ضد. List<Object> ثم لن تلاحظ أي اختلافات في السرعة. قد يكون هناك بعض الاختلافات في الأساليب الفعلية المتاحة في كل من هذه، خاصة في .NET 3.5 وطرق التمديد، ولكن هذا له علاقة بمزيد من التقويمات التي تم إهمالها إلى حد ما من أي شيء آخر.

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

من MSDN (http://msdn.microsoft.com/en-us/library/system.collations.generic.aspx.)

ال system.collections.generic.تحتوي مساحة الاسم على واجهات وفئات تحدد المجموعات العامة، والتي تسمح للمستخدمين بإنشاء مجموعات مكتوبة بقوة توفر سلامة وأداء أفضل من مجموعات غير عامة مكتوبة بقوة.

قم ببعض المعايير وستعرف ما ينفذ بشكل أفضل. أنا ضيئي أن الفرق صغير جدا.

قائمة <> هي إصدار محضاف من قائمة الصفيف. سوف يضمن أنك سوف تحصل على نفس نوع الكائن في المجموعة.

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