Meilleure façon d'utiliser une propriété pour référencer une paire clé-valeur dans un dictionnaire [fermé]

StackOverflow https://stackoverflow.com/questions/44100

Question

C'est une question assez triviale, mais je suis curieux d'entendre les opinions des gens à ce sujet.

Si je dispose d'un dictionnaire auquel j'accède via des propriétés, lequel de ces formats préférez-vous pour la propriété ?

/// <summary>
/// This class's FirstProperty property
/// </summary>
[DefaultValue("myValue")]
public string FirstProperty {
    get {
        return Dictionary["myKey"];
    }
    set {
        Dictionary["myKey"] = value;
    }

C’est probablement la manière typique de procéder.C'est assez efficace, facile à comprendre, etc.Le seul inconvénient est qu'avec une clé plus longue ou plus complexe, il serait possible de la mal orthographier ou de ne modifier qu'une seule instance ou quelque chose du genre, ce qui m'amène à ceci :

/// <summary>
/// This class's SecondProperty property
/// </summary>
[DefaultValue("myValue")]
private const string DICT_MYKEY = "myKey"
public string SecondProperty {
    get {
        return Dictionary[DICT_MYKEY];
    }
    set {
        Dictionary[DICT_MYKEY] = value;
    }

Ce qui est légèrement plus compliqué, mais semble offrir une sécurité supplémentaire et est plus proche de ce que je considère comme la solution "Code Complete".L'inconvénient est que lorsque vous avez déjà un bloc /// et un bloc [DefaultValue()] au-dessus de la propriété, il commence à y avoir un peu de monde là-haut.

Alors, lequel préférez-vous et pourquoi ?Quelqu'un a-t-il de meilleures idées ?

Était-ce utile?

La solution

J'aime le second simplement parce que tout évitement des chaînes/nombres magiques dans le code est une bonne chose.OMI, si vous devez référencer plusieurs fois un nombre ou une chaîne littérale dans le code, il doit s'agir d'une constante.Dans la plupart des cas, même s'il n'est utilisé qu'une seule fois, il doit être constant

Autres conseils

Je suis d'accord avec @Glenn pour un point de vue purement pointilleux.La réponse est ce qui fonctionne pour vous.Tout ce code se déroule sur 10 lignes (si vous incluez la dernière accolade omise).Personne ne va se perdre et les risques de faute de frappe sont assez minces (pas impossibles mais très minces).D'un autre côté, si vous avez utilisé la clé ailleurs, optez définitivement pour la constante.

Personnellement, je m'en prendrais à vous à propos de votre style d'accolade.:) Je rigole!C'est vraiment une question de style.

Cela ne répond pas à votre question, mais je ne pense pas que « DefaultValue » signifie ce que vous pensez.Il ne définit pas de valeur par défaut pour votre propriété.

Voir MSDN et cette question pour plus de détails.

Beaucoup de gens diraient probablement que la deuxième option est « correcte », car toute valeur utilisée plus d’une fois doit être refactorisée en constante.J'utiliserais très probablement la première option.Vous vous êtes déjà rapproché de la solution "Code Complete" en encapsulant l'entrée du dictionnaire dans une propriété à typage fort.Cela réduit le risque de rater la récupération de la mauvaise entrée de dictionnaire dans votre implémentation.Il n'y a que 2 endroits où vous pourriez vous tromper en tapant "myKey", dans le getter et le setter, et cela serait très facile à repérer.

La deuxième option serait tout simplement trop compliquée.

Lorsque vous n'utilisez une chaîne magique que dans un seul contexte, comme vous le faites, je pense que ça va.
Mais si jamais vous avez besoin d'utiliser la clé dans une autre partie du cours, allez const.

Vous pouvez faire correspondre les noms de propriété aux clés et utiliser la réflexion pour obtenir le nom de la recherche.

public string FirstProperty {
get {
    return Dictionary[PropertyName()];
}
set {
    Dictionary[PropertyName()] = value;
}

private string PropertyName()
{
    return new StackFrame(1).GetMethod().Name.Substring(4);
}

Cela présente l'avantage supplémentaire de rendre toutes vos implémentations de propriétés identiques, vous pouvez donc les configurer dans Visual Studio sous forme d'extraits de code si vous le souhaitez.

@Joel, tu ne veux pas compter sur StackFrame. Doublure peut gâcher votre journée au moment où vous vous y attendez le moins.

Mais à la question :Quoi qu’il en soit, cela n’a pas vraiment d’importance.

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