constдля констант времени компиляции. Вы можете просто сделать это static readonly, но это применимо только к самой METRICSпеременной (которая обычно должна быть Метрикой, согласно соглашениям об именах .NET ). Это не сделало бы список неизменным - чтобы кто-то мог позвонитьMETRICS.Add("shouldn't be here");
Вы можете использовать a, 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>впоследствии, вы можете рассматривать всю коллекцию как неизменяемую.
(Использование заглавных букв здесь в основном предположение - использование более полных имен сделает их более понятными, ИМО.)
Если вы объявляете его как IList<string>, IEnumerable<string>, ReadOnlyCollection<string>или что - то еще до вас ... если вы ожидаете , что она должна рассматриваться только как последовательность, то IEnumerable<string>, вероятно , будет наиболее подходящим. Если порядок имеет значение и вы хотите, чтобы люди могли получить к нему доступ по индексу, это IList<T>может быть целесообразным. Если вы хотите сделать неизменность очевидной, объявите это как ReadOnlyCollection<T>можно удобно, но негибко.