Ich versuche so etwas zu tun:
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
};
Aber leider funktioniert das nicht:
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.
Wie kann ich dieses Problem lösen?
ReadOnlyCollection
. Fragen sind verwandt, aber keines ist ein Duplikat eines anderen.Antworten:
const
ist für Konstanten zur Kompilierungszeit. Sie könnten es einfach machenstatic readonly
, aber das würde nur für dieMETRICS
Variable selbst gelten (die normalerweise gemäß .NET-Namenskonventionen Metriken sein sollte ). Es würde die Liste nicht unveränderlich machen - also könnte jemand anrufenMETRICS.Add("shouldn't be here");
Möglicherweise möchten Sie ein verwenden
ReadOnlyCollection<T>
, um es zu verpacken. Beispielsweise:ReadOnlyCollection<T>
Wraps nur eine potenziell veränderbare Sammlung, aber da nichts anderes Zugriff auf die nachfolgende Sammlung hat,List<T>
können Sie die gesamte Sammlung als unveränderlich betrachten.(Die Großschreibung hier ist meistens eine Vermutung - die Verwendung vollständigerer Namen würde sie klarer machen, IMO.)
Ob als erklären
IList<string>
,IEnumerable<string>
,ReadOnlyCollection<string>
oder etwas anderes ist an Ihnen ... wenn Sie erwarten , dass es sollte nur als eine Folge behandelt werden, dannIEnumerable<string>
wäre wahrscheinlich am besten geeignet sein. Wenn die Reihenfolge wichtig ist und Sie möchten, dass Personen über den Index darauf zugreifen können, ist diesIList<T>
möglicherweise angemessen. Wenn Sie die Unveränderlichkeit sichtbar machen möchten, erklären Sie sie alsReadOnlyCollection<T>
praktisch - aber unflexibel.quelle
new List<string>{ ... }
Teil. Danke Jon :)ReadOnlyCollection
GeräteIList<>
wie das entlarvt.Add
Sie müssen
static
readonly
stattdessen eine Liste verwenden. Und wenn Sie möchten, dass die Liste unveränderlich ist, sollten Sie sieReadOnlyCollection<T>
lieber verwenden alsList<T>
.quelle
Sie suchen nach einem einfachen Code wie diesem:
quelle