在处理嵌套字典时,由于“字典不包含'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'的定义”错误总是发生,而在第二段代码中却能正常工作呢?有没有办法让它们按我的预期工作?
我还想指出,我要避免直接用它们的值替换这些常量,因为它们将来很容易被修改。
当然,如果这是一个不可逾越的限制,我将不得不诉诸第二段代码,尽管我发现它更加肮脏且有些难以理解。
谢谢。
答案 0 :(得分:0)
这里是正确的语法来创建类似于您尝试的字典的字典:
const int OBJECT_ID1 = 0;
const int OBJECT_ID2 = 1;
const int OBJECT_ID3 = 2;
Dictionary<int, Dictionary<int, float>> MyDict = new Dictionary<int, Dictionary<int, float>>()
{
{
OBJECT_ID1, new Dictionary<int, float>()
{
{ OBJECT_ID2, 5.0f },
{ OBJECT_ID3, 15.0f }
}
}
};