visual valor una registros listas lista instanciar guardar busquedas agregar c# web-services generics fxcop

c# - valor - La mejor forma de usar List<T> y exponer Collection<T>



list t in c# (2)

List <T> o Collection <T> están bien en este caso.

En términos de la pregunta original, puedes envolver una Lista <T> en una Colección <T> muy simple:

List<Foo> list = new List<Foo>(); // ... Collection<Foo> col = new Collection<Foo>(list);

Esta es una verdadera envoltura; agregue un artículo al envoltorio (col), y se agrega a la lista. Esto puede ser un poco confuso, porque muchos de estos constructores usan el argumento para hacer la población inicial, pero no se vinculan a la lista original. Collection <T> es una excepción ;-p

Como se encuentra en un límite del servicio web, esa recomendación de FxCop no se aplica. Eso es útil (en línea con el blog reciente de Eric Lippert ) para evitar que un interlocutor pise la memoria del destinatario, pero en un escenario distribuido del servicio web que simplemente no se aplica. De hecho, dado que los servicios web tienen algunos problemas bien documentados con ciertos escenarios genéricos, una matriz simple es posiblemente muy útil y pragmática en un límite del servicio web. En el contexto del blog de Eric, en este caso, no se trata de la cuestión del que llama / llama, ya que existe una barrera forzada entre los dos.

En términos de WSDL / mex, sospecho que los 3 (list / collection / array) se convertirán en un bloque de elementos, por lo que puede elegir el que sea más conveniente.

Debo implementar un servicio web que exponga una lista de valores (enteros, clases personalizadas, etc.). Mi solución de trabajo devuelve una List<T> , y de acuerdo con FxCop es mejor devolver una Collection<T> o ReadOnlyCollection<T> .

Si elijo devolver un ReadOnlyCollection<T> , el servicio web muestra un error como:

Para ser XML serializable, los tipos que heredan de ICollection deben tener una implementación de Add(System.Int32) en todos los niveles de su jerarquía de herencia. System.Collections.ObjectModel.ReadOnlyCollection 1 [[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] no implementa Add(System.Int32) .

¿Cuál es tu forma favorita de usar internamente una List<T> y exponer una Collection<T> ? (usando C #, y preferiblemente framework 2.0 solamente)


Normalmente devuelvo IList <T> de un servicio web de WCF: FxCop está feliz con esto. No estoy seguro de si esto funciona con los servicios web de ASMX.