如何在C#中获得C++的"const"等价物?

use*_*670 3 c#

在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#还具有所有语言功能的可模仿性.

Cat*_*lMF 9

您想使用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)