Tengo problemas con FxCop warning CA1006, Microsoft.Design "DoNotNestGenericTypesInMemberSignatures". Específicamente, estoy diseñando una clase ReportCollection<T>
que hereda de ReadOnlyCollection<Report<T>>
, y su constructor public
toma un IList<Report<T>>
como parámetro.¿Hay alguna solución para FxCop warning CA1006?
La sugerencia para la fijación de esta advertencia no es muy útil:
"Para el montaje de una violación de esta regla, cambiar el diseño para eliminar el argumento de tipo anidado". Hay dos maneras en que puedo ver lo que va a cambiar el diseño como se sugiere:
- hacer que el constructor
internal
. Esto no funciona en mi caso. El constructor debe serpublic
porque esta clase de colección necesita ser instanciable por código fuera del ensamblado. - Haga que el constructor tome
Report<T>[]
en lugar deIList<Report<T>>
. Esto no es óptimo porque el código externo debe tener la flexibilidad de usar estructuras de datos de tamaño dinámico comoList<T>
en lugar de matrices de tamaño fijo.
En este punto, he renunciado y suprimido esta advertencia. ¿Hay una mejor solución?
No pondría ningún límite al nivel "seguro" de anidación. Los tipos genéricos deben anidarse sin importar qué tan profunda sea la semántica. Las limitaciones en el soporte de interfaces para covarianza y contravarianza significan que el código que espera, p. un 'IDictionary>' no podrá aceptar un 'IDictionary >', pero cuando los genéricos anidados son semánticamente correctos, preferiría usarlos en lugar de tratar de evitarlos. –
supercat