2010-08-15 9 views
3

J'ai quelques problèmes pour choisir le bon type d'exception à lancer lorsqu'un attribut personnalisé attendu est introuvable (je préférerais l'une des exceptions .NET existantes).Choix du bon type d'exception lorsque l'attribut personnalisé est manquant

Que recommandez-vous dans ce cas? Merci d'avance.

Edit:

Voici son contexte:

[<ExpectedAttribute()>] 
let foo args ... = ... 

La fonction foo (qui est définie par l'utilisateur) est transmis à un moteur d'exécution. Le runtime doit lancer une exception si l'attribut personnalisé n'est pas présent.

+0

Veuillez donner plus de contexte - où l'exception va-t-elle être levée? Est-ce lié à un argument? –

Répondre

3

Si une personnalisée attribut est absent, il ne va pas s'adapter à une exception System.

Vous pourriez utiliser une exception système, mais quel est votre domaine ici? Et quel genre de contrat est brisé? Il importe si cela est sur le point sérialisation essais ou ...


Modifier, après votre foo plus: Le plus proche que vous venez à l'exception du système est System.ArgumentException, parce que votre moteur reçoit un paramètre qui ne répondre à ses exigences.

Mais je définirais ma propre exception MissingExpectedAttribute.

2

Je suggère quelque chose de général comme "InvalidOperationException" ou "InvalidArgumentException" et mettre les détails sur l'attribut attendu dans le message.

+0

'InvalidOperationException' serait approprié, mais' InvalidArgumentException' ne le serait pas, 'ArgumentException' et les sous-types sont définis explicitement comme étant la validation de l'argument de la méthode. – Richard

+0

Ni l'un ni l'autre n'est assez spécifique, mais vous avez raison, InvalidOperation est un peu plus proche. Une exception personnalisée est probablement la meilleure solution. –

1

Si le constructeur, la méthode ou la propriété appelée a reçu l'objet de rupture de règle, alors ArgumentException. Si l'objet de rupture de règle faisait partie de votre état à partir d'une opération précédente, et que la méthode ou la propriété qui exige que cet attribut soit présent a été appelée, InvalidOperation.