我有一个像这样的类(class):

class SomeTests {
  private Guid[] someGuids = new Guid[] { ... }

  public void ThoseGuidsShouldAlwaysBeThere() {
    foreach (Guid g in someGuids) { // error appears here
        // ...
    }
  }
}

从语义上讲,我希望someGuidsconst,因为除了重新编译代码之前,它们永远都不会被更新。但是添加const关键字会生成error CS0168:null is not valid in this context.
阅读该错误的MSDN页面时,在我看来,编译器认为我正在这样做:
foreach (Guid g in null) {
我不明白在这里添加const是如何导致此问题的,以及如何解决我的语义问题(列表是只读的,不可写的)-将其保留为数组而不是列表是“几乎”足够的。

最佳答案

尝试使Guid[]成为常量将给您带来错误“除字符串以外的引用类型的const字段只能用null初始化”的错误。

改为readonly:

private readonly Guid[] someGuids = new Guid[] { Guid.NewGuid() };

当是readonly时,您还可以在构造函数中分配值:
public SomeTests()
{
    someGuids = new[] { Guid.NewGuid(), Guid.NewGuid() };
}

正如Jeffery在评论中提到的那样,此解决方案可防止重新分配someGuids,但仍可以修改项目。 Jeffery在他的回答中解决了这个问题。

07-27 13:39