预注意:我知道没有const数组这样的东西
我有一个字符串数组,从未在代码中更改过,现在只用于一个函数.我有两个声明Array的选项:
private static readonly string[] A = { "a" ,"b", "c" }string[] A = { "a", "b", "c" }哪个选项更受欢迎?是否存在性能差异或需要考虑的其他因素?
对于第二个选项肯定会有性能损失 - 它会创建一个新数组并在每次方法调用时初始化它.
如果您确信不会意外地改变阵列,我会选择第一个选项.如果您想在代码中更清楚地创建一个有效不可变的集合,可以使用:
private static readonly IReadOnlyList<string> A = new string[] { "a" ,"b", "c" };
Run Code Online (Sandbox Code Playgroud)
这实际上并不会使它变得不可变 - 你必须小心不要将它传递给任何其他可能将它string[]强制转换为变异的代码.
为了真正的不变性,您可以使用Array.AsReadOnly:
private static readonly IReadOnlyList<string> A =
Array.AsReadOnly(new string[] { "a" ,"b", "c" });
Run Code Online (Sandbox Code Playgroud)
或者您当然可以使用不可变集合库.
(注意,操作via IReadOnlyList<string>会比直接在数组上操作慢一些;在你的应用程序中,这是否有意义取决于你正在做什么.)