How can I get the equivalent of C++'s “const” in C#?
本问题已经有最佳答案,请猛点这里访问。
在C++中,如果我希望一个对象在编译时被初始化,此后就永远不会更改,我只需添加前缀EDCOX1(0)就可以了。
在C语言中,我写
1 2 3 4 5 | // file extensions of interest private const List<string> _ExtensionsOfInterest = new List<string>() { ".doc",".docx",".pdf",".png",".jpg" }; |
然后得到错误
A const field of a reference type other than string can only be
initialized with null
然后研究了栈溢出的误差,提出了采用
但这并不能让我有我想要的行为,因为
1 2 3 4 5 | // file extensions of interest private static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>() { ".doc",".docx",".pdf",".png",".jpg" }; |
仍可以重新分配。
那么我该怎么做我想做的呢?
(令人惊讶的是,除了我想要的以外,C的所有语言功能都是不可测量的)
您要使用
1 2 3 4 | private readonly static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>() { ".doc",".docx",".pdf",".png",".jpg" }; |
编辑
刚刚注意到readOnlyCollection类型不允许空构造函数或在括号中提供列表。必须在构造函数中提供列表。
所以你真的可以把它写成一个普通的只读列表。
1 2 3 4 | private readonly static List<string> _ExtensionsOfInterestList = new List<string>() { ".doc",".docx",".pdf",".png",".jpg" }; |
或者,如果您真的想使用readOnlyCollection,您需要在构造函数中提供高于正常值的列表。
1 | private readonly static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>(_ExtensionsOfInterestList); |