在C++中,如果我想在编译时初始化一个对象并且之后永远不会改变,我只需添加前缀const.
在C#中,我写道
// file extensions of interest
private const List<string> _ExtensionsOfInterest = new List<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
并得到错误
除string之外的引用类型的const字段只能用null初始化
然后我研究了Stack Overflow上的错误,并提出了"解决方案" ReadOnlyCollection<T>.除字符串之外的引用类型的const字段只能使用null Error初始化
但这并没有真正给我我想要的行为,因为
// file extensions of interest
private static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
仍然可以重新分配.
那么我该怎样做我想做的事情呢?
(令人惊讶的是,除了我想要的语言之外,C#还具有所有语言功能的可模仿性.
您想使用readonly修饰符
private readonly static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
编辑
刚刚注意到ReadOnlyCollection类型不允许空构造函数或在括号中提供列表.您必须在构造函数中提供列表.
所以你真的可以把它写成一个只读的普通列表.
private readonly static List<string> _ExtensionsOfInterestList = new List<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想使用ReadOnlyCollection,你需要在构造函数中提供上面的普通列表.
private readonly static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>(_ExtensionsOfInterestList);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |