Je suis d'accord avec Andrzej. L'exception doit être lancée dans le "set" car une propriété ne doit jamais être définie sur une valeur non valide et vous devez "capturer le contexte de la valeur invalide"
J'utilise une des classes ArgumentException car "under le capot » un « ensemble » est un appel à une méthode créée automatiquement nommée « CLASSNAME'.set_'PROPERTYNAME »(valeur)
Par exemple
class MyClass
{
string name;
public string Name {
get {
return name;
}
set {
if (value==null) {
throw new ArgumentNullException("value", "The value of the property Name cannot be set to null.");
}
name = value;
}
}
}
en interne, cela crée deux méthodes
public string get_Name()
et
public void set_Name(string value)
Si vous affichez la trace de la pile c'est là l'exception sera levée à partir.
C'est pourquoi j'ai toujours inclure du texte comme "La valeur de la propriété Nom ..."dans le message afin que l'utilisateur de la propriété puisse voir où l'exception a été levée car il n'y aura pas de méthode appelée set_SOMEPROPERTY (valeur SOMETYPE) visible par l'utilisateur de la bibliothèque de classes. Vous êtes supposé faire selon le "NET Framework 4 - Directives de conception pour les exceptions, attraper et lancer les types d'exception standard (Here) À propos de la moitié de la page sous" ArgumentException, ArgumentNullException, et ArgumentOutOfRangeException ", il indique" Do value value for the nom du paramètre de valeur implicite des paramètres de propriété ")
+1 pour la directive de conception –
Pour cet exemple spécifique, cela peut être logique. Si, toutefois, la valeur était utilisée dans le setter pour plus de stockage, je lancerais quand même. – ctacke
@ctacke - le setter ne doit être utilisé que pour le stockage de la valeur. Si plus d'action est nécessaire, une fonction SetProvider (valeur de chaîne) doit être utilisée. –