Bienvenidos sean a este post, hoy veremos un metodo para los objetos List.
Este metodo es muy similar al que posee los array del cual hablamos en este post, dado que no transforma la lista en un elemento de solo lectura sino que le crea un «wrapper» o envoltorio a este y lo debemos asignar un objeto de tipo ReadOnlyCollection, antes de continuar veamos como es su sintaxis:
tipo_readonlycollecction nombre = lista.AsReadOnly();
Debemos definir un nuevo objeto y a este le asignaremos el resultado de aplicar el metodo sobre la lista que deseamos dejar como solo lectura, los tipos que disponemos como ReadOnlyCollections son los siguientes:
- ICollection<T>
- IEnumerable<T>
- IList<T>
- IReadOnlyCollection<T>
- IReadOnlyTest<T>
- ICollection
- IEnumerable
- IList
Para comprender mejor como trabaja vamos a crear un ejemplo, para ello generaremos un nuevo archivo con el nombre de sololeer.cs y le agregaremos el siguiente codigo:
sololeer.cs
using System;
using System.Collections.Generic;
public class Program
{
static int Main()
{
List<string> nombres = new List<string>(4);
nombres.Add("tinchicus");
nombres.Add("enzo");
nombres.Add("ariel");
nombres.Add("javier");
IList<string> sl = nombres.AsReadOnly();
Console.WriteLine("Contenido lista original: ");
mostrar(nombres);
Console.WriteLine("Modificamos lista original: ");
nombres[0] = "martin";
mostrar(nombres);
try
{
Console.WriteLine("Modificamos lista solo lectura: ");
sl[0] = "martin";
}
catch (NotSupportedException e)
{
Console.WriteLine(e.Message);
}
return 0;
}
static void mostrar(List<string> lista)
{
for(int i=0; i < lista.Count; i++)
Console.WriteLine("Nombre #{0}: {1}", i, lista[i]);
}
}
La libreria Generic es la que nos permitira crear los objetos de tipo List, antes de ver el codigo de Main hablemos sobre la funcion que tenemos por fuera, esta se encargara de mostrar el contenido de la lista que pasemos como argumento, esto lo hacemos asi para no repetir innecesariamente codigo cada vez que verifiquemos lo realizado en el codigo, con esto comentado pasemos a nuestro codigo principal, en este caso primero definiremos un objeto de tipo List que almacenara cuatro elementos de tipo string, despues le agregaremos los elementos a almacenar por medio del metodo Add, para despues crear un objeto de solo lectura, observen que definimos el elemento asignandole el resultado de aplicar el metodo sobre la lista anterior, lo siguiente sera identificar que mostraremos el contenido original de la primera lista y para ello llamaremos a la funcion externa pasandole la lista, despues de esto identificaremos que modificamos la lista original, cambiamos el primer valor y nuevamente llamamos a mostrar para verificar la modificacion, volveremos a repetir esto pero de una forma muy particular.
En este caso usaremos un try/catch, en el bloque try indicaremos que vamos a modificar la lista de solo lectura, y procedemos a modificar la primera posicion tal como hicimos anteriormente, en el bloque catch interceptaremos la excepcion NotSupportedException y en su bloque mostraremos el mensaje que identifica a esta excepcion, con todo esto comentado pasemos a compilarlo y ver como es nuestra salida:
C:\Users\tinchicus>sololeer.exe
Contenido lista original:
Nombre #0: tinchicus
Nombre #1: enzo
Nombre #2: ariel
Nombre #3: javier
Modificamos lista original:
Nombre #0: martin
Nombre #1: enzo
Nombre #2: ariel
Nombre #3: javier
Modificamos lista solo lectura:
La colección es de solo lectura.
C:\Users\tinchicus>
Analicemos la salida, en el primer caso vemos la lista original, en el segundo caso vemos como se modifico la lista original con el nuevo dato y en el tercer caso nos devolvio la excepcion indicando que es de solo lectura y no podremos modificarlo, esto es ideal para cuando algun estado de nuestra lista quede con esos datos y no podamos modificarlo bajo ninguna excepcion.
En resumen, hoy hemos visto AsReadOnly, que es, para que sirve, como se utiliza, un ejemplo para poder entender su utilizacion y como trabaja realmente, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
