constпризначений для констант часу компіляції. Ви можете просто зробити це static readonly, але це стосується лише самої METRICSзмінної (яка, як правило, має бути "Метрики", умовами .NET іменування ). Це не зробить список незмінним - щоб хтось міг зателефонуватиMETRICS.Add("shouldn't be here");
Можливо, ви хочете використовувати його, ReadOnlyCollection<T>щоб обернути його. Наприклад:
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>просто обгортає потенційно змінену колекцію, але оскільки більше нічого після цього не матиме доступу List<T>, ви можете вважати загальну колекцію непорушною.
(Велика література тут переважно здогадка - використання більш повних імен зробить їх зрозумілішими, IMO.)
Якщо ви оголошуєте його як IList<string>, IEnumerable<string>, ReadOnlyCollection<string>або що - то ще до вас ... якщо ви очікуєте , що вона повинна розглядатися тільки як послідовність, то IEnumerable<string>, ймовірно , буде найбільш підходящим. Якщо замовлення має значення, і ви хочете, щоб люди мали доступ до нього за індексом, IList<T>можливо, це буде доречно. Якщо ви хочете зробити незмінність очевидною, оголосивши її як ReadOnlyCollection<T>можна зручно - але негнучко.