سؤال

لدي فئة الممتلكات وتعريض داخلي IList<> من خلال

System.Collections.ObjectModel.ReadOnlyCollection<>

كيف يمكنني تمرير جزء من هذا ReadOnlyCollection<> دون نسخ العناصر في مجموعة جديدة (اريد عرض لايف و الجهاز الهدف قصير في الذاكرة)?أنا تستهدف Compact Framework 2.0.

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

المحلول

حاول أسلوب إرجاع التعداد باستخدام العائد:

IEnumerable<T> FilterCollection<T>( ReadOnlyCollection<T> input ) {
    foreach ( T item in input )
        if (  /* criterion is met */ )
            yield return item;
}

نصائح أخرى

هذه foreach عينات على ما يرام, على الرغم من أنك يمكن أن تجعل منهم أكثر مقتضب إذا كنت تستخدم .NET framework 3.5 و LINQ:

return FullList.Where(i => IsItemInPartialList(i)).ToList();

يمكنك دائما كتابة الدرجة التي تطبق IList و توجيه كل المكالمات إلى القائمة الأصلية (حتى لا يكون هو نفسه نسخة من البيانات) بعد ترجمة الفهارس.

هل يمكن استخدام العائد العودة لإنشاء قائمة تم تصفيتها

IEnumerable<object> FilteredList()
{
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item )
            yield return item;
    }
}

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

class EvenList: IList
{
    private IList innerList;
    public EvenList(IList innerList)
    {
         this.innerList = innerList;
    }

    public object this[int index]
    {
        get { return innerList[2*i]; }
        set { innerList[2*i] = value; }
    }
    // and similarly for the other IList methods
}

كيف تصفية عناصر تحتاج إلى أن يكون الوصول إليها?إن كان من خلال التكرار ثم ربما يمكنك كتابة مخصص التكرار أن يتخطى كل العناصر التي لا تريد علنا مرئية ؟

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

(تنويه:أنا لم تكن مألوفة جدا مع C#, لذلك هذه هي الإجابات العامة.قد يكون هناك أكثر إجابات محددة إلى C# التي تعمل على نحو أفضل)

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