2010-07-20 8 views
2

Je pense que nous pouvons tous convenir que les propriétés automatiques dans C# 3.0 sont géniales. Quelque chose comme ceci:Auto-propriétés: Vérification/validation pendant le "set"

private string name; 
public string Name 
{ 
    get { return name; } 
    set { name = value; } 
} 

se réduit à ceci:

public string Name { get; set; } 

Lovely!

Mais qu'est-ce que je suis supposé faire si je veux, par exemple, convertir la chaîne Name en utilisant la méthode ToUpperInvariant() lors de "setting". Ai-je besoin de revenir à l'ancien style de création de propriétés C# 2.0?

private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value.ToUpperInvariant(); } 
    } 

Ou y at-il une manière plus élégante d'accomplir ceci?

+1

Je crains que vous soyez bloqué avec la méthode C# 2.0. – ChaosPandion

+1

Je dirais que muter la valeur de telle sorte qu'un appelant externe n'obtiendra pas la même valeur qui a été définie est un "effet secondaire" et non souhaitable (par exemple: chaîne s = "blah"; foo.Name = s; (foo.Name == s) est parfois faux ce qui est inattendu pour un consommateur de votre classe) Vous devriez probablement le laisser en tant que propriété auto et exécuter ToUpperInvariant(); en interne lorsque vous devez l'utiliser ou fournir une propriété private-only avec seulement un getter qui exécute ToUpperInvariant(). – David

+0

@David: La même pensée m'avait traversé l'esprit. Je suis encore indécis quant à la façon dont je veux qu'il fonctionne. Dans le cas précis sur lequel je travaille en ce moment, j'ai affaire à des codes à barres qui sont pour la plupart des chiffres, mais qui comportent deux caractères alphabétiques. Peu importe qu'ils soient en majuscules ou en minuscules ou pas, mais ce serait bien s'ils sont tous en majuscules, tout le temps. Donc, je pense que je suis d'accord avec "l'effet secondaire" que vous décrivez. Mais d'une manière générale, je pense que je serais d'accord avec votre évaluation. Merci pour le conseil. – Pretzel

Répondre

4

Oui, vous devez le reconvertir. Une auto-propriété ne peut pas faire ce genre de vérification.

+0

Merci pour la confirmation! Toutes les références que j'avais lu sur Auto-Properties n'avaient jamais rien mentionné à ce sujet. Cela semblait impliquer par la façon dont certains articles et livres étaient écrits, mais rien n'indiquait explicitement que c'était, en fait, de cette façon. Merci encore d'avoir confirmé mes soupçons. – Pretzel

+0

On dirait que mon "Green Check" vous a poussé jusqu'à 10K. Félicitations! Vous pouvez modérer maintenant. : D S'il vous plaît soyez gentils avec le reste de nous sous-fifres ...: O – Pretzel

+0

@Pretzel: Merci, vous avez raison, c'était votre "chèque vert" ^^ qui était un long chemin à parcourir pour obtenir ce 10K. – tanascius