J'ai un dictionnaire immuable qui est exposé dans une classe.
Actuellement, mon code ressemble
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class FooClass
{
private static ReadOnlyDictionary<string, byte> _validRevisions
= new ReadOnlyDictionary<string, byte>(
new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
} );
public static ReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
// other FooClass contents...
}
J'ai utilisé le champ de support _validRevisions
car je ne pouvais pas trouver une meilleure façon de créer une propriété de dictionnaire constant partagé. Existe-t-il une meilleure façon de gérer cela ou peut-être devrais-je simplement rendre le terrain public?
Ma principale question étant de savoir s'il existe un moyen plus court d'initialiser le _validRevisions
champ lui-même? Créer un dictionnaire en ligne pour le passer dans un dictionnaire (qui se trouve être en lecture seule) semble un peu ... d'une odeur de code. C'est ça? Y a-t-il une meilleure façon?
EDIT: encore une chose à propos du ROD que je viens de remarquer, il n'y a pas de méthode pour prendre en charge la vérification s'il contient une valeur donnée ... y a-t-il une raison à cela liée à sa lecture seule?
Si cela ne vous dérange pas d'avoir un IReadOnlyDictionary
au lieu d'un ReadOnlyDictionary
, vous pouvez l'utiliser, car Dictionary
implémente IReadOnlyDictionary
:
private static IReadOnlyDictionary<string, byte> _validRevisions
= new Dictionary<string, byte>
{
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
public static IReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
Le ReadOnlyDictionary<TKey, TValue>
est juste un wrapper autour d'un dictionnaire normal et il n'y a qu'un constructeur pour l'initialiser qui prend une autre instance Dictionary
.
Donc non , il n'y a pas de moyen plus court. Mais j'utiliserais le constructeur statique pour initialiser des objets statiques complexes:
private static ReadOnlyDictionary<string, byte> _validRevisions;
static FooClass()
{
IDictionary<string, byte> dict = new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
};
_validRevisions = new ReadOnlyDictionary<string, byte>(dict);
}