Question

J'ai un asp: ColonneLiée avec DateTime? données (i appellerons colonne X) dans le asp: GridView. Je boucle à travers toutes les lignes de la grille, et jeter la propriété .Text à la colonne X à DateTime (i besoin de ceci pour faire quelques vérifications et changer la couleur de fond de la cellule si nécessaire).

J'ai 2 options:

  1. enveloppez le casting dans try / catch ... poignée FormatException (dans le cas où la colonne X se rend avec l'ordure dedans) ... et travaillons uniquement avec des valeurs DateTime valides.

  2. vérifier la colonne X pour vous assurer qu'il est dans le format correct (comment?) avant boîtier et moulé uniquement si le format est ok.

Quelle approche devrais-je prendre, et pourquoi?

Merci.

p.s. 1 mise vote pour toutes les explications, réponse acceptée pour TryParse

Edit2:., Même si je l'ai utilisé TryParse, j'ai décoché la réponse acceptée de garder la discussion en cours

Mon rapport "bon de données" / "mauvaises données" est environ 2/1 - cela signifie beaucoup de mauvaise entrée

Je Réaccepter la réponse dans quelques jours, si rien d'autre arrive.

Était-ce utile?

La solution

Vous pouvez faire la 2ème option. DateTime.TryParse peut aider.

Autres conseils

Je pense que cela dépend un peu sur la façon dont vous vous attendez souvent qu'il soit dans le mauvais format. Enroulant quelque chose dans un try-catch n'a pas vraiment aucun impact si l'exception est rarement soulevée. Mais si vous vous attendez à être élevé, beaucoup, alors vous devriez peut-être ajouter un chèque à elle.

Je pencherais pour la deuxième option. I jamais exceptions d'utilisation pour le code normal, parce que je peux ensuite exécuter avec l'option studio visuel "break dans le débogueur lors exception est levée".

Cela me permet d'économiser beaucoup de temps lors de l'identification des problèmes réels dans le code, car le débogueur arrête au problème réel au lieu d'ailleurs. Si des exceptions sont utilisées pour les questions non problématiques, je ne peux pas le faire de manière fiable.

Les exceptions prennent beaucoup de ressources pour soulever et attraper. Vous devriez éviter de les laisser être jetés quand il y a des options plus élégantes disponibles.

Une règle que je suis. Toujours essayer d'attraper autant d'erreurs que vous pouvez manuellement et utiliser les exceptions en dernier recours

Les exceptions ont un impact sur les performances.

Une chose à noter est que « TryParse » ne sera pas nécessairement de meilleures performances que d'avoir un essai Catch autour de votre « Parse ».

Cela dépend de votre taux d'échec. Try-catch ont un impact de la performance, bien que la plupart de l'impact est quand vous échouez. Toutefois, si vous avez un taux de réussite de 95%, voire plus, et la performance est une considération, alors vous voudrez peut-être penser à envelopper votre boucle dans un try-catch, de sorte que vous ne touchez votre déclaration « essayer » quand il y a un échec.

int i = 0;
List<String> prePopulated;
List<DateTime> toPopulate;

while(i < prepopulated.Length)
{
   Try
   {
      while(i < prepopulated.Length)
      {
         List<DateTime>.add(DateTime.Parse(prePopulated[i]));
         i++;
      }
   }
   Catch(Exception ex)
   {
      //log if necessary
      i++;
   }
}

Gardez à l'esprit, cette solution est que mieux si vos données sont principalement propres et la performance est la clé. Dans le cas contraire, le plus simple d'une ligne « TryParse » est mieux.

Je suis d'accord avec DateTime.TryParse. Je travaille sur un site de volume très élevé et nous ne sommes pas autorisés à prendre des exceptions dans l'interface utilisateur, jamais !, ce qui nous permet d'éviter les bugs. Nous essayons vraiment dur pour que le code que nous appelons ne peut pas lancer des exceptions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top