创建从string
s到int
s的常量(在运行时从不更改)映射的最有效方法是什么?
我试过使用const Dictionary,但不起作用。
我可以用适当的语义实现一个immutable wrapper,但这看起来仍然不完全正确。
如果有人问起,我将在一个生成的类中实现IDataErrorInfo,并且正在寻找一种方法来在我的描述符数组中进行columnName查找。
我没有意识到(测试时拼写错误!哦!)该开关接受字符串,所以这就是我要使用的。谢谢!
发布于 2008-11-06 10:26:22
在C#中创建真正的编译时生成的常量字典并不是一项简单的任务。实际上,这里没有一个答案能真正做到这一点。
不过,有一个解决方案可以满足您的需求,尽管不一定是一个很好的解决方案;请记住,根据C#规范,切换情况表被编译为常量散列跳转表。也就是说,它们是常量字典,而不是一系列if-else语句。因此,考虑下面这样的switch-case语句:
switch (myString)
{
case "cat": return 0;
case "dog": return 1;
case "elephant": return 3;
}
这正是你想要的。是的,我知道,这很丑陋。
发布于 2008-11-06 09:45:26
在当前的框架中,几乎没有不可变的集合。在.NET 3.5中,我能想到一个相对轻松的选择:
使用Enumerable.ToLookup()
- Lookup<,>
类是不可变的(但在rhs上是多值的);您可以在Dictionary<,>
中很容易地做到这一点:
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();
发布于 2008-11-06 09:57:52
enum Constants
{
Abc = 1,
Def = 2,
Ghi = 3
}
...
int i = (int)Enum.Parse(typeof(Constants), "Def");
https://stackoverflow.com/questions/268084
复制相似问题