我有一个像这样的类(class):
class SomeTests {
private Guid[] someGuids = new Guid[] { ... }
public void ThoseGuidsShouldAlwaysBeThere() {
foreach (Guid g in someGuids) { // error appears here
// ...
}
}
}
从语义上讲,我希望
someGuids
为const
,因为除了重新编译代码之前,它们永远都不会被更新。但是添加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在他的回答中解决了这个问题。