【发布时间】:2019-10-17 19:07:02
【问题描述】:
在处理嵌套字典时,我被警告说代码将无法编译,因为 “字典不包含 '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' 的定义”错误不断发生,而它在第二段代码中运行良好?有没有办法让它们按我的意图工作?
我还想指出,直接用它们的值替换这些常量是我不想做的事情,因为它们很容易在未来被修改。
当然,如果这是一个无法逾越的限制,我将不得不求助于第二段代码,尽管我发现它更脏而且有些难以理解。
谢谢。
【问题讨论】:
-
这不是因为
const,而是因为你的语法。写像Key = Value这样的东西根本不是有效的c#代码。myDict[key] = value然而是。 -
如果你想要类似于你的语法的东西,试试 C# 6 字典初始化语法:visualstudiomagazine.com/Blogs/Tool-Tracker/2015/04/…
-
目前您的代码有 3 次尝试设置编译时间之后的编译时间常数。在其中 2 个中,您尝试将 int 常量设置为浮点值。在其中一个中,您尝试将 Dictonary 分配给 int 常量。所以那里没有任何东西对我来说几乎是有意义的。而且我知道六种编程语言。
-
出于某种原因,我认为这就是将值分配给字典的工作原理。这只是一个语法问题,我按照@kristech 的回答修复了它。我最近开始使用字典,所以我不知道应该如何正确声明一个。
标签: c# dictionary constants