Qualcun altro ha menzionato questo, ma penso davvero che un Enum
sia lo strumento per il lavoro qui. Ecco una spiegazione dettagliata di quando e perché possono essere utili. È una buona scelta di design rispetto a molte altre opzioni di costante / chiave per prestazioni, estensibilità, leggibilità, ecc.
Se capisco cosa stai cercando di fare, un Enum
sta facendo esattamente quello che intendi con il tuo uso off-label di nameof
: una costante che è solo un nome. Mi piace il termine "costante strongmente tipizzata" per descrivere il concetto di Enum
. Fuori dalla mia testa ...
// Note: Enum names should describe a generic member, so avoid names like IDs/KeyCollection/PersonalData
public Enum Identifier
{
FirstName, SSN, Fingerprint, Retina, OtherKey, FinalKey
}
// ...
var ssn = GetValue(SSN);
// Other considerations vs const string keys:
string[] AllMyConstants = Enum.GetNames(typeof(Identifier)); // Collections and parsing to/from strings built-in
////Identifier.SSN = "Compiler error will save me from trying to change a constant."
// Bonus thing I just learned: System.Enum uses ints underneath, so you can get imaginative defining enums as ints:
public Enum BasketballPosition {PG = 1, SG = 2, SF = 3, PF = 4, C = 5};
public Enum Grade {F = 0, D = 60, C = 70, B = 80, A = 90};
public Enum DifficultyFactor {Easy = 1, Medium = 10, Hard = 100, Insane = 1000};
public Enum Transaction {Deposit = 1, Withdrawal = -1, Transfer = 0};
public Enum MilestoneDay {Conceived = -270, Born = 0, FirstBirthday = 365, EighteenthBirthday = 6570};