在哪里创建"const"数组

Fre*_*gar 1 c# c#-4.0

预注意:我知道没有const数组这样的东西

我有一个字符串数组,从未在代码中更改过,现在只用于一个函数.我有两个声明Array的选项:

  1. 让它像这样静态: private static readonly string[] A = { "a" ,"b", "c" }
  2. 在函数内定义它: string[] A = { "a", "b", "c" }

哪个选项更受欢迎?是否存在性能差异或需要考虑的其他因素?

Jon*_*eet 7

对于第二个选项肯定会有性能损失 - 它会创建一个新数组并在每次方法调用时初始化它.

如果您确信不会意外地改变阵列,我会选择第一个选项.如果您想在代码中更清楚地创建一个有效不可变的集合,可以使用:

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>会比直接在数组上操作慢一些;在你的应用程序中,这是否有意义取决于你正在做什么.)