J'ai des problèmes avec FxCop warning CA1006, Microsoft.Design "DoNotNestGenericTypesInMemberSignatures". Plus précisément, je conçois une classe ReportCollection<T>
qui hérite de ReadOnlyCollection<Report<T>>
et son constructeur public
prend un IList<Report<T>>
en tant que paramètre.Y a-t-il de bonnes solutions de contournement pour l'avertissement FxCop CA1006?
La suggestion de fixer cet avertissement est pas très utile:
« Pour corriger une violation de cette règle, modifier la conception pour supprimer l'argument de type imbriqué. » Il y a deux façons que je peux voir à ce jour pour changer la conception comme l'a suggéré:
- constructeur rendre le
internal
. Cela ne fonctionne pas dans mon cas. Le constructeur doit êtrepublic
car cette classe de collection doit être instanciable par du code en dehors de l'assembly. - Faites en sorte que le constructeur prenne un
Report<T>[]
au lieu d'unIList<Report<T>>
. C'est sous-optimal car le code externe devrait avoir la flexibilité d'utiliser des structures de données de taille dynamique commeList<T>
au lieu de tableaux de taille fixe.
À ce stade, j'ai abandonné et supprimé cet avertissement. Y a-t-il une meilleure solution?
Je ne mettrais aucune limite au niveau d'imbrication "sûr". Les types génériques devraient être imbriqués aussi profondément que la sémantique l'exige. Les limitations sur le support des interfaces pour la covariance et la contravariance signifient que le code qui attend par ex. un 'IDictionary>' ne sera pas en mesure d'accepter un 'IDictionary >', mais lorsque les génériques imbriqués sont sémantiquement corrects je préfère les utiliser plutôt que d'essayer de les contourner. –
supercat