当前位置: 首页 > 知识库问答 >
问题:

无法使用常量定义字典键?[副本]

鲁羽
2023-03-14

在处理嵌套字典时,有人警告我,代码不会编译,因为“字典不包含‘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;

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

我很清楚,我可以使用下面的一段代码来代替(它可以工作),但是,我想避免声明字典变量,因为它以后不会用于任何其他东西(我相信原始代码更干净):

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);

因此,我的问题是:为什么“Dictionary不包含‘CONST_NAME’的定义”错误不断发生,而在第二段代码中却可以正常工作?有没有办法让它们像我想的那样工作?

我还想指出,直接用它们的值替换这些常量是我不想做的事情,因为它们在将来很容易被修改

当然,如果这是一个不可逾越的限制,我将不得不求助于第二段代码,尽管我发现它有点脏,有点难以理解。

非常感谢。

共有1个答案

高建本
2023-03-14

下面是创建像您正在尝试的字典的正确语法:

            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 }
                    }
                }
            };
 类似资料:
  • 问题内容: 我对在swift中使用 static 关键字有些困惑。众所周知,swift引入了 let 关键字来声明不可变对象。就像声明表视图单元格的ID一样,该ID在其生命周期中很可能不会发生变化。现在在一些类似struct的声明中使用 static 关键字是什么: 而 让 关键字做同样的事情。在目标C中,我们使用static声明了一些常量,例如 除了让我更好奇的是,还使用了 static 关键字

  • 在JavaScript中使用const可以设置什么类型的值,特别是函数,有没有限制?这有效吗?虽然它确实有效,但出于任何原因,它被认为是不好的做法吗? 在ES6中,所有函数都应该这样定义吗?如果是这样,这似乎并没有流行起来。

  • 我正在尝试扫描多个文件,搜索同一行中的两个关键字。我试图在同一行中寻找关键词“seqadv”和“突变”。问题是我不断得到错误“nameerror:name'wt_resignal'is not defined”。当我搜索一个关键字“seqadv”时,程序运行流畅。

  • 1.【强制】 不允许任何魔法值(即未经定义的常量)直接出现在代码中。 反例: String key = "Id#taobao_" + tradeId; cache.put(key, value); 2.【强制】 long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。 说明: Long a = 2l; 写的是数字的 21,还是 Long 型的

  • 问题内容: 我必须怎么做才能将自定义类型的对象用作Python字典中的键(我不希望“对象id”用作键),例如 如果名称和位置相同,我想将MyThing用作相同的键。从C#/ Java开始,我习惯于重写并提供一个equals和hashcode方法,并保证不会突变该hashcode依赖的任何内容。 我必须在Python中做什么才能完成此任务?我应该吗? (在一个简单的例子中,就像这里一样,也许最好将一

  • 问题内容: 我想在Django模板的字典中使用变量作为键。我一辈子都无法弄清楚该怎么做。如果我有一个带有名称或ID字段的产品,以及带有该产品ID索引的评级词典,那么我想说: 在python中,这可以通过简单的方式完成 但是我无法使其在模板中工作。我尝试使用…没有骰子。有想法吗? 问题答案: 你需要预先准备数据,在这种情况下,你应该将两元组列表传递给模板: