不能使用常量来定义字典键吗? [重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

[当使用嵌套字典时,由于“字典不包含'CONST_NAME'的定义”],我被警告该代码将无法编译。该字典是在同一类的静态构造函数上声明的,所以这不是问题。

简而言之,代码如下:

const int OBJECT_ID1 = 0;
const int OBJECT_ID2 = 1;
const int OBJECT_ID3 = 2;

(...)

static MyCLass()
{
   MyDictionary = new Dictionary<int, Dictionary<int, float>>
   {
      OBJECT_ID1 = new Dictionary<int, float>
      {
         OBJECT_ID2 = 5.0f,
         OBJECT_ID3 = 15.0f
      }
   };
}

public static readonly Dictionary<int, Dictionary<int, float>> MyDictionary;

所有三个常量都有此错误,所以不是因为嵌套字典(我认为)。

我很清楚,我可以改用下面的代码(并且可以工作),但是,我想避免声明一个Dictionary变量,因为以后它不会用于其他任何事情(而且我相信原始的代码更干净):

MyDictionary = new Dictionary<int, Dictionary<int, float>>();
Dictionary<int, float> dict = new Dictionary<int, float>();
dict.Add(OBJECT_ID2, 5.0f);
dict.Add(OBJECT_ID3, 15.0f);
MyDictionary.Add(OBJECT_ID1, dict);

所以,我的问题是:为什么“字典不包含'CONST_NAME'的定义”错误不断发生,而在第二段代码中却能正常工作?有没有办法让它们按我的预期工作?

[我也想指出,我要避免直接用它们的值替换这些常量,因为它们将来很容易被修改。

当然,如果那是一个不可逾越的限制,我将不得不诉诸第二段代码,尽管我发现它更加脏and而且有些难以理解。

谢谢。

[当处理嵌套字典时,由于“字典不包含'CONST_NAME'的定义”,我被警告该代码将无法编译。该字典是在静态构造函数上声明的...

c# dictionary const
1个回答
0
投票

这里是正确的语法,可以像您正在尝试的那样创建字典:

© www.soinside.com 2019 - 2024. All rights reserved.