Intento hacer algo como esto:
public const List<String> METRICS = new List<String>()
{
SourceFile.LOC,
SourceFile.MCCABE,
SourceFile.NOM,
SourceFile.NOA,
SourceFile.FANOUT,
SourceFile.FANIN,
SourceFile.NOPAR,
SourceFile.NDC,
SourceFile.CALLS
};
Pero desafortunadamente esto no funciona:
FileStorer.METRICS' is of type 'System.Collections.Generic.List<string>'. A const field of a reference type other than string can only be initialized with null.
¿Como puedó resolver esté problema?
ReadOnlyCollection
. Las preguntas están relacionadas, pero ninguna es un duplicado de otra.Respuestas:
const
es para constantes en tiempo de compilación. Usted podría simplemente hacer que seastatic readonly
, pero que sólo se aplicaría a laMETRICS
propia variable (que por lo general debe ser Métrica lugar, por .NET convenciones de nombres ). No haría que la lista fuera inmutable, por lo que alguien podría llamarMETRICS.Add("shouldn't be here");
Es posible que desee utilizar un
ReadOnlyCollection<T>
para envolverlo. Por ejemplo:ReadOnlyCollection<T>
simplemente envuelve una colección potencialmente mutable, pero como nada más tendrá acceso a laList<T>
posterior, puede considerar la colección general como inmutable.(Las mayúsculas aquí son principalmente conjeturas: usar nombres más completos los aclararía, en mi opinión).
Si se declara como
IList<string>
,IEnumerable<string>
,ReadOnlyCollection<string>
o alguna otra cosa depende de usted ... si esperas que sólo debe ser tratada como una secuencia, entoncesIEnumerable<string>
probablemente sería más apropiado. Si el orden es importante y desea que las personas puedan acceder a él por índice,IList<T>
puede ser apropiado. Si desea que la inmutabilidad sea aparente, declare queReadOnlyCollection<T>
podría ser útil, pero inflexible.fuente
new List<string>{ ... }
papel. Gracias Jon :)ReadOnlyCollection
implementeIList<>
lo que expone.Add
En su lugar, deberá utilizar una
static
readonly
lista. Y si desea que la lista sea inmutable, entonces debería considerar usar enReadOnlyCollection<T>
lugar deList<T>
.fuente
Estás buscando un código simple, como este:
fuente