Saya mencoba melakukan sesuatu seperti ini:
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
};
Namun sayangnya ini tidak berhasil:
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.
Bagaimana saya bisa mengatasi masalah ini?
ReadOnlyCollection
. Pertanyaan terkait, tetapi tidak ada yang duplikat dari yang lain.Jawaban:
const
adalah untuk konstanta waktu kompilasi. Anda bisa membuatnyastatic readonly
, tetapi itu hanya akan berlaku untukMETRICS
variabel itu sendiri (yang biasanya harus Metrik, dengan konvensi penamaan .NET ). Itu tidak akan berhasil daftar itu tidak berubah - sehingga seseorang dapat meneleponMETRICS.Add("shouldn't be here");
Anda mungkin ingin menggunakan a
ReadOnlyCollection<T>
untuk membungkusnya. Sebagai contoh:ReadOnlyCollection<T>
hanya membungkus koleksi yang berpotensi berubah, tetapi karena tidak ada orang lain yang akan memiliki akses keList<T>
setelahnya, Anda dapat menganggap keseluruhan koleksi sebagai tidak dapat diubah.(Kapitalisasi di sini sebagian besar merupakan tebakan - menggunakan nama yang lebih lengkap akan membuatnya lebih jelas, IMO.)
Apakah Anda menyatakan sebagai
IList<string>
,IEnumerable<string>
,ReadOnlyCollection<string>
atau sesuatu yang lain terserah Anda ... jika Anda berharap bahwa hal itu harus diperlakukan sebagai urutan, makaIEnumerable<string>
mungkin akan paling sesuai. Jika urutan penting dan Anda ingin orang dapat mengaksesnya dengan indeks,IList<T>
mungkin sesuai. Jika Anda ingin membuat keabadian itu tampak, menyatakannya sebagaiReadOnlyCollection<T>
bisa berguna - tetapi tidak fleksibel.sumber
new List<string>{ ... }
bagian itu. Terima kasih Jon :)ReadOnlyCollection
penerapannyaIList<>
seperti yang diekspos.Add
Anda harus menggunakan
static
readonly
daftar sebagai gantinya. Dan jika Anda ingin daftar tersebut tidak dapat diubah, Anda mungkin ingin mempertimbangkan untuk menggunakanReadOnlyCollection<T>
daripadaList<T>
.sumber
Anda mencari kode sederhana, seperti ini:
sumber