Nous discutions avec nos collègues de ce que cela signifie si le nom de la méthode commence par "Try".
Il y avait les opinions suivantes:
- Utilisez "Try" lorsque la méthode peut renvoyer une valeur nulle.
- Utilisez "Try" lorsque la méthode ne lèvera pas d'exception.
Quelle est la définition officielle? Que dit "Try" dans le nom de la méthode? Existe-t-il une directive officielle à ce sujet?
c#
naming-conventions
ms007
la source
la source
Réponses:
Ceci est connu sous le nom de modèle TryParse et a été documenté par Microsoft. La page MSDN officielle sur les exceptions et les performances dit :
Ainsi, si vous avez du code pour lequel un cas d'utilisation régulier signifierait qu'il pourrait lever une exception (comme l'analyse d'un int), le modèle TryParse a du sens.
la source
(Corrigé) Il existe une ligne directrice officielle, comme l'a suggéré Erik.
Quand je vois la
TrySomething
méthode, je l'assumebool
Something
méthode qui me permet de gérer toute exception moi-même. (modifier, suggéré par Jesse Webb)la source
TryFoo
méthode, il y aura uneFoo
méthode similaire qui me permettra de gérer moi-même toute `` exception. Les signatures de ces méthodes seront probablement différentes, de sorte que leurs utilisations ne sont pas interchangeables sans d'autres changements de code.Je pense que vous devriez l'utiliser
try
lorsque vous voulez continuer. Peu importe qu'une méthode renvoie une valeur ou non.Cas 1: s'il retourne bien, vous pouvez procéder d'une certaine manière.
Cas 2: s'il ne revient pas: ça va toujours; vous pouvez procéder d'une autre manière.
Et si vous attendez une valeur en sortie de cette méthode, utilisez le
out
paramètre.Exemple
la source
Vous devez utiliser "Try" dans le nom de la méthode, lorsque vous voulez manifester le fait que l'invocation de la méthode peut produire un résultat non valide. Selon le standard .NET, ce n'est pas une fonction qui lève une exception, mais la fonction qui renvoie une partie
VALID
ouNON_VALID
, du point de vue du programme, une valeur.À la fin, tout cela sur la convention de dénomination que vous décidez d'utiliser dans votre groupe.
la source
Assurez-vous d'inclure
try
dans votre nom de méthode si:bool TrySomething(input, out yourReturn)
Donc, fondamentalement, si nous utilisons
try
-methods, nous ne récupérons qu'un résultat booléen.Ainsi, le code suivant ne lèvera aucune exception:
Alors que ce code peut (et dans ce cas sera) lever des exceptions:
L'utilisation des méthodes Try est un moyen plus sûr et plus défensif de coder. De plus, l'extrait de code n ° 2 nécessite plus de performances à exécuter s'il ne s'agit pas d'un entier.
la source
int number = int.Parse(input);
si vous souhaitez qu'il soit plus significatif dans ce contexte.int number;
déclaration avant le bloc try et l'number = ...
affectation.TryLoadFile(path, out file)
woah, en dehors de la RAM. Ainsi, l'appelant ne s'attendrait à aucune erreur pour un mauvais chemin ou un accès refusé, mais une exception pour les choses plus bizarres qui pourraient également mal tourner. Et documentez-le.Oncle Bob donne l'exemple ci-dessous dans son livre Clean Code . Chaque fois que nous nous attendons à ce qu'une exception soit levée, nous pouvons utiliser le
Try
préfixe d'un nom de méthode:Et puis (adapté):
La
tryToShutDown
méthode n'effectue aucune gestion des erreurs, car c'est la responsabilité de lasendShutDown
méthode.Le
TryParse
modèle de Microsoft enfreint la directive de code propre qui dit que nous devons éviter les paramètres de sortie.Si nous ne développons pas une nouvelle version de C #, nous n'avons pas à nous en tenir à toutes les directives de Microsoft. Parfois, ils ne sont pas les meilleurs.
la source