在哈希表中使用变量时,c#找不到对象

时间:2016-05-20 06:15:45

标签: c# hashtable grammar

这很奇怪..我正在使用哈希表,当我尝试访问带变量的元素时,它找不到它。

这是我的代码:

namespace gramerTest
{
    class Program
    {
        private static Hashtable byteintmap = new Hashtable();

        static Program()
        {
            Console.WriteLine("init");
            byteintmap.Add(0x1, 0);
            byteintmap.Add(0x2, 1);
            byteintmap.Add(0x3, 2);
            byteintmap.Add(0x4, 3);
            byteintmap.Add(0x5, 4);
            byteintmap.Add(0x6, 5);
        }

        static void Main(string[] args)
        {
            byte b = 0x5;
            Console.WriteLine(byteintmap[0x5] + " dir");
            switch (b)
            {
                case 0x5:
                Console.WriteLine(byteintmap[0x5] + " s var");
                break;
            }

            Console.WriteLine(byteintmap[b]+" var");
        }
    }
}  

结果是:

init
4 dir
4 s var
 var

1 个答案:

答案 0 :(得分:3)

它正在发生,因为Hashtable使用对象作为键:盒装字节不等于盒装整数(即使它们在内部存储相同的值)。

您可以测试一下:

object a = (byte)0x5;
object b = (int)0x5;
Console.WriteLine(a.Equals(b)); //prints False

您有两种选择:

  1. 最后将其更改为Console.WriteLine(byteintmap[(int)b]+" var");

  2. 使用键入的Dictionary<int, int>代替