consté para constantes de tempo de compilação. Você poderia simplesmente fazer isso static readonly, mas isso só se aplicaria à METRICSprópria variável (que normalmente deveria ser Metrics, pelas convenções de nomenclatura .NET ). Isso não tornaria a lista imutável - para que alguém pudesse ligarMETRICS.Add("shouldn't be here");
Você pode querer usar um ReadOnlyCollection<T>para embrulhá-lo. Por exemplo:
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>apenas envolve uma coleção potencialmente mutável, mas como nada mais terá acesso a ela List<T>, você pode considerar a coleção geral como imutável.
(A capitalização aqui é principalmente uma suposição - usar nomes mais completos os tornaria mais claros, IMO.)
Se você declará-lo como IList<string>, IEnumerable<string>, ReadOnlyCollection<string>ou qualquer outra coisa é com você ... se você espera que ele só deve ser tratado como uma seqüência, em seguida, IEnumerable<string>provavelmente seria mais adequado. Se o pedido for importante e você quiser que as pessoas possam acessá-lo por índice, IList<T>pode ser apropriado. Se você quiser tornar a imutabilidade aparente, declarar que ReadOnlyCollection<T>pode ser útil - mas inflexível.