Question

Je crée une bibliothèque "commune" à utiliser comme référence dans divers projets de solution par d'autres membres de l'équipe. Les méthodes sont généralement void Fonctions sans données renvoyées réelles.

Je recherche un pourquoi pour forcer l'utilisation de ces méthodes dans un Try...Catch bloquer par d'autres. Je dois m'assurer que les erreurs sont correctement gérées. Je pensais à compter sur un type de retour booléen, mais cela ne me permettra pas de renvoyer le message d'erreur également, donc ma seule option est de lancer un Exception.

Si un forçage approprié n'est pas possible, comment puis-je faire un attribut qui apparaît lors de la compilation pour avertir le développeur de l'exigence d'essai / capture? (Une sorte de Obsolete attribut).

D'autres meilleures approches?

ÉDITER:

Voici mon scénario complet:

J'ai une méthode de code appelant un service Web pour mettre à jour une valeur à distance. La mise à jour est assez cruciale. La méthode qu'elle fonctionne bien, mais que se passe-t-elle si le service Web n'est pas accessible? L'appel ne renvoie aucune valeur.

Était-ce utile?

La solution

Placer quelque chose à l'intérieur d'un try/catch le bloc ne le fait pas "correctement géré" - en fait, dans le grande majorité Des cas, la bonne façon de gérer une exception est de la laisser bouillonner au niveau suivant. Mise en garde: try/finally est beaucoup plus courant, permettre le nettoyage des ressources, mais encore plus courant que cela using.

Vous ne pouvez pas appliquer "et vous devez l'utiliser correctement" sur le code; C'est implicite dans n'importe quelle API, et vous provoquerez simplement une irritation et une gêne, et forcer les gens à des styles de codage inappropriés et inappropriés, tout en vous donnant un complètement artificiel et incorrect le sens du code est correct.

Si vous voulez être sûr que le code fonctionne correctement: testez-le.

Il n'y a pas d'attributs que vous pouvez utiliser pour ce scénario. Vous pouvez probablement créer une règle FXCOP ou similaire, mais pour les raisons ci-dessus: je ne le recommande pas.

Autres conseils

Je ne ferais pas cela, mais en tant que solution amusante au problème déclaré, vous pourriez créer votre propre type d'exception: une réussite. Ensuite, vous lancez cette exception à la fin de votre méthode pour indiquer le succès. Cela rend la méthode à peu près inutilisable sans une forme d'essai / capture. Mais: Ne fais pas ça.

Vous pouvez retourner une classe de résultats personnalisée:

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

Alors:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

Ou peut-être revenir string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

Ou avoir l'erreur comme une sortie:

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

Ou retour Exception mais ne le faites pas jeter.

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