objetos lista example elementos ejemplos diccionario colecciones agregar c# windows-mobile compact-framework .net-2.0

c# - lista - ¿Cómo puedo exponer solo un fragmento de IList<>?



keyvaluepair c# ejemplos (6)

¿Cómo se necesita acceder a los elementos filtrados? Si se trata de un iterador, entonces ¿podría escribir un iterador personalizado que omita los elementos que no quiere que sean públicamente visibles?

Si necesita proporcionar una Colección, es posible que deba escribir su propia clase de Colección, que solo se aproxima a la Colección subyacente, pero impide el acceso a los elementos que no quiere que sean públicamente visibles.

(Descargo de responsabilidad: no estoy muy familiarizado con C #, estas son respuestas generales. Puede haber respuestas más específicas a C # que funcionen mejor)

Tengo una propiedad de clase que expone un IList interno <> a través de

System.Collections.ObjectModel.ReadOnlyCollection<>

¿Cómo puedo pasar una parte de esta ReadOnlyCollection<> sin copiar elementos en una nueva matriz (necesito una vista en vivo, y el dispositivo de destino tiene poca memoria)? Estoy apuntando a Compact Framework 2.0.


Dependiendo de cómo necesite filtrar la colección, es posible que desee crear una clase que implemente IList (o IEnumerable, si eso le funciona), pero que tiene problemas con la indexación y el acceso para que solo devuelva los valores que desea. Por ejemplo

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 }


Estas muestras foreach están bien, aunque puedes hacerlas mucho más escuetas si estás usando .NET 3.5 y LINQ:

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


Podría usar el retorno de rendimiento para crear una lista filtrada

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


Siempre puede escribir una clase que implementa IList y reenvía todas las llamadas a la lista original (para que no tenga su propia copia de los datos) después de traducir los índices.


Pruebe un método que devuelva una enumeración usando yield:

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