0
votes

Try-attrape vs if-sinon | Devrais-je me battre pour utiliser si-d'autre dans ceci ou simplement aller avec la prise try?

résumé em>


On m'a donné une tâche pour configurer un logiciel de gestion (pour un artiste à petite échelle, leur matériel peut donc certainement faire face), cependant, je préférerais Pour que cela soit aussi efficace que possible avant de leur donner. La principale fonctionnalité est terminée, et maintenant, il s'agit principalement de toucher et d'optimiser. P>

code em> p>


        DateTime DueDate;
        try
        {
            DateTime.TryParse(dteCommission.SelectedDate.Value.Date.ToShortDateString(),
            out DueDate);
        }
        catch(Exception E)
        {
            MessageBox.Show("Due Date wasn't set. Defaulting to current date.", "Alert",
                MessageBoxButton.OK, MessageBoxImage.Warning);
            DueDate = DateTime.Parse(DateTime.Now.ToShortDateString());
        }


3 commentaires

Vous devriez éviter la manipulation des exceptions dans tous les cas à moins d'une situation exceptionnelle. C'est pourquoi ils s'appellent des exceptions.


Il y a plusieurs choses en cours ici, et il n'est pas clair s'ils sont pertinents pour votre question. Par exemple, vous semblez convertir des denttimes en cordes et en arrière sur DateTimes, et ce n'est pas clair pour moi pourquoi. Si vous souhaitez supprimer le composant TIME de la journée, utilisez simplement la propriété datetime.date . Mais ce n'est pas la source de votre exception, il semble juste d'être une complexité supplémentaire non liée à votre question.


Quoi que vous fassiez, essayez de toujours éviter de saisir toute exception de type exception sauf si vous prévoyez de repousser.


4 Réponses :


2
votes

Exception E n'a été utilisée que pour l'obtenir rapidement et la véritable exception est connue. L'erreur donnée est "L'objet nullable doit avoir une valeur". Système.invalidoperationException

Comment sauriez-vous que dans l'exécution de ce serait une exception différente? Disons nullreferenceException (par exemple) peut-être. N'oubliez pas que toutes les exceptions implémentent l'objet d'exception.

est-il préférable de gérer cela comme je le fais ou si cela fonctionnerait-il mieux?

Vous devez mieux gérer les erreurs. Vous savez que cela pourrait être nullable, vous devez donc vérifier s'il a une valeur avant de continuer. Vous devriez rechercher des avertissements et les gérer avec élégance.

Et si oui, comment allais-je continuer à la mettre en œuvre? xxx


1 commentaires

C'était ce que j'étais après, merci. Avez-vous des suggestions où je devrais aller pour réviser la manipulation des erreurs?



1
votes

Si vous êtes déterminé à utiliser Tryparse , c'est une meilleure approche pour aller avec if-ele qui dépend de la sortie du Tryparse méthode. Mais si vous utilisez parse , il est probable que vous vous retrouvez avec l'une de ces exceptions:

  • argumentnulxception (si la valeur du paramètre est null)
  • FormatException (si la valeur du paramètre est autre que la valeur entière ou non au format approprié)
  • FormatException (si la valeur du paramètre est hors de portée d'entier)

    Il est donc préférable d'aller avec la manipulation des exceptions.

    pour la première approche: xxx

    pour le second cas que vous pouvez aller avec: xxx


0 commentaires

3
votes

Comme vous utilisez déjà tryparse Il n'est pas nécessaire d'utiliser essayer ... Catch bloc. Pas seulement c'est inefficace, il n'est pas non plus propre. Il suffit de prendre la valeur de retour de datetime.trypsarse et prenez la décision.

var isdate = datetime.tryparse (dtecommission.selecteddate.value.date.toshortdateSestring (),

et ensuite, if (isdate) {...} else {...}


2 commentaires

J'accepterais cela, mais en utilisant malheureusement tryparse a jeté une erreur.


Dans ce cas, il est très probable que dans ' dtecommission.selecteddate.value.date "soit la date valeur" ou date est null , donc Vous devriez vérifier la santé mentale de cet objet, puis utiliser ce qui précède comme suggéré.



0
votes

J'aimerais suggérer d'utiliser si d'autre déclaration pour un tel scénario plutôt que sur l'exception, il sera également optimisé et vous permet de donner un message de manière significative spécifique au scénario.

La manipulation des exceptions doit être utilisée uniquement pour gérer des scénarios inconnus.


0 commentaires