لماذا تقوم المصفوفات في .NET فقط بتنفيذ iEnumerable وليس ienumerform ؟

StackOverflow https://stackoverflow.com/questions/2773740

سؤال

كنت أقوم بتطبيق فصل ArrayList الخاص بي وتركت مندهشًا عندما أدركت ذلك

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

لم ينجح. ما هو سبب عدم تنفيذ المصفوفات في .NET؟

هل هناك أي عمل في الأرجاء؟

شكرًا

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

المحلول

المصفوفات تنفذ IEnumerable<T>, ، ولكن يتم ذلك كجزء من المعرفة الخاصة التي يمتلكها CLI للمصفوفات. يعمل هذا كما لو كان تطبيقًا صريحًا (ولكن ليس: يتم ذلك في وقت التشغيل). لن تظهر العديد من الأدوات هذا التنفيذ ، وهذا ما هو موضح في ملاحظات قسم من Array نظرة عامة على الفصل.

يمكنك إضافة طاقم:

return ((IEnumerable<T>)_array).GetEnumerator();

ملاحظة ، تم تغيير تغطية MSDN الأقدم (docs.microsoft.com) لهذا الأمر عدة مرات مع إصدارات .NET مختلفة ، تحقق من ملاحظات الجزء.

نصائح أخرى

يمكنك استخدام طريقة عامة IEnumerable<T> OfType<T>() من مساحة الاسم System.linq ، والتي تمتد واجهة iEnumerable. سوف يقوم بتصفية جميع العناصر التي يختلف النوع عن T والعودة IEnumerable<T> collection. كما ترى (IEnumerable<T>)_array مشغل التحويل ، قد لا يكون آمنًا ، لأنه System.Array (وغيرها من أنواع nongeneric) تخزين عناصر من النوع System.Object.

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