J'aime la programmation défensive. Je déteste les lancers d'exception, mais ce n'est pas le sujet de ma question.IOrdered Programmation défensive et en nombre
J'adapté une extension à LINQ pour être en mesure d'effectuer une commande par un nom de colonne
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
Avec programmation défensive, cette méthode renvoie la dénombrable donnée si le nom de la colonne est pas valide.
Maintenant, je dois effectuer un tri secondaire avec ThenBy. donc j'ai besoin de cette signature:
public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
J'ai besoin de retourner un IOrderedEnumerable. Mon problème est de garder ma fonction de programmation défensive: Je dois retourner l'ensemble donné si le nom de la colonne n'est pas valide.
Existe-t-il une manière propre de faire ceci? Tout ce que je pense sont des sortes de trucs:
- Utilisez la réflexion à l'ordre par la première propriété trouvée, ce qui est risqué parce que la propriété ne peut pas être tri-permis
- Mettre en oeuvre mon propre IOrderedEnumerable, ce qui est risqué aussi parce que j'effectue la commande sur IQueryable ou IList, alors j'effectue d'autres opérations de LinQ, ainsi j'ai peur des effets secondaires.
Et des conseils/suggestions? Merci
Comment est sortie de retour qui ne se rapporte pas à ce qui était demandé dans la façon dont il a été demandé plus défensif que de jeter une exception, attrapant à une couche particulière, l'afficher d'une manière appropriée au type de programme, et d'être plus confiant que les bugs n'ont pas été introduits par d'autres codes en supposant que la méthode pour commander les énumérables enumerables enumerables? Cela semble être le contraire de la programmation défensive. –