constest pour les constantes de compilation. Vous pouvez simplement le faire static readonly, mais cela ne s'appliquerait qu'à la METRICSvariable elle-même (qui devrait généralement être des métriques à la place, selon les conventions de dénomination .NET ). Cela ne rendrait pas la liste immuable - pour que quelqu'un puisse appelerMETRICS.Add("shouldn't be here");
Vous voudrez peut-être utiliser un ReadOnlyCollection<T>pour l'envelopper. Par exemple:
public static readonly IList<String> Metrics = new ReadOnlyCollection<string>
(new List<String> {
SourceFile.LoC, SourceFile.McCabe, SourceFile.NoM,
SourceFile.NoA, SourceFile.FanOut, SourceFile.FanIn,
SourceFile.Par, SourceFile.Ndc, SourceFile.Calls });
ReadOnlyCollection<T>encapsule juste une collection potentiellement mutable, mais comme rien d'autre n'aura accès à la List<T>suite, vous pouvez considérer la collection globale comme immuable.
(La capitalisation ici est principalement une supposition - l'utilisation de noms plus complets les rendrait plus clairs, IMO.)
Que vous déclarez comme IList<string>, IEnumerable<string>, ReadOnlyCollection<string>ou quelque chose d' autre à vous ... si vous attendez qu'il ne doit être traitée comme une séquence, puis IEnumerable<string>serait probablement plus approprié. Si l'ordre est important et que vous souhaitez que les utilisateurs puissent y accéder par index, cela IList<T>peut être approprié. Si vous voulez rendre l'immuabilité apparente, déclarez-la comme ReadOnlyCollection<T>étant pratique - mais inflexible.