constdotyczy stałych czasu kompilacji. Można to po prostu zrobić static readonly, ale dotyczyłoby to tylko METRICSsamej zmiennej (która zwykle powinna być Metryki, zgodnie z konwencjami nazewnictwa .NET ). Nie uczyniłoby to listy niezmienną - więc ktoś mógłby zadzwonićMETRICS.Add("shouldn't be here");
Możesz użyć a, ReadOnlyCollection<T>aby go owinąć. Na przykład:
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>po prostu otacza potencjalnie zmienną kolekcję, ale ponieważ nic innego nie będzie miało dostępu do List<T>późniejszej, możesz uznać całą kolekcję za niezmienną.
(Wielkie litery to głównie domysły - użycie pełniejszych nazw sprawiłoby, że byłyby jaśniejsze, IMO).
Czy zadeklarować ją jako IList<string>, IEnumerable<string>, ReadOnlyCollection<string>lub coś innego jest do ciebie ... jeśli można oczekiwać, że powinien być traktowany jedynie jako ciąg, a następnie IEnumerable<string>będzie prawdopodobnie najbardziej odpowiednie. Jeśli kolejność ma znaczenie i chcesz, aby ludzie mieli do niego dostęp za pomocą indeksu, IList<T>może być odpowiednie. Jeśli chcesz, aby niezmienność była widoczna, zadeklaruj ją jako ReadOnlyCollection<T>przydatną - ale nieelastyczną.