首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中创建常量字典

在C#中创建常量字典
EN

Stack Overflow用户
提问于 2008-11-06 09:38:23
回答 11查看 135.8K关注 0票数 148

创建从strings到ints的常量(在运行时从不更改)映射的最有效方法是什么?

我试过使用const Dictionary,但不起作用。

我可以用适当的语义实现一个immutable wrapper,但这看起来仍然不完全正确。

如果有人问起,我将在一个生成的类中实现IDataErrorInfo,并且正在寻找一种方法来在我的描述符数组中进行columnName查找。

我没有意识到(测试时拼写错误!哦!)该开关接受字符串,所以这就是我要使用的。谢谢!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-11-06 10:26:22

在C#中创建真正的编译时生成的常量字典并不是一项简单的任务。实际上,这里没有一个答案能真正做到这一点。

不过,有一个解决方案可以满足您的需求,尽管不一定是一个很好的解决方案;请记住,根据C#规范,切换情况表被编译为常量散列跳转表。也就是说,它们是常量字典,而不是一系列if-else语句。因此,考虑下面这样的switch-case语句:

代码语言:javascript
运行
复制
switch (myString)
{
   case "cat": return 0;
   case "dog": return 1;
   case "elephant": return 3;
}

这正是你想要的。是的,我知道,这很丑陋。

票数 197
EN

Stack Overflow用户

发布于 2008-11-06 09:45:26

在当前的框架中,几乎没有不可变的集合。在.NET 3.5中,我能想到一个相对轻松的选择:

使用Enumerable.ToLookup() - Lookup<,>类是不可变的(但在rhs上是多值的);您可以在Dictionary<,>中很容易地做到这一点:

代码语言:javascript
运行
复制
    Dictionary<string, int> ids = new Dictionary<string, int> {
      {"abc",1}, {"def",2}, {"ghi",3}
    };
    ILookup<string, int> lookup = ids.ToLookup(x => x.Key, x => x.Value);
    int i = lookup["def"].Single();
票数 40
EN

Stack Overflow用户

发布于 2008-11-06 09:57:52

代码语言:javascript
运行
复制
enum Constants
{
    Abc = 1,
    Def = 2,
    Ghi = 3
}

...

int i = (int)Enum.Parse(typeof(Constants), "Def");
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/268084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档