楼主的需求符合简单的唯一哈希        unsafe class uniqueHash : IDisposable
        {
            private fastCSharp.pointer data;
            public uniqueHash()
            {
                data = fastCSharp.unmanaged.Get(sizeof(char) * 0x3f);
                char* point = data.Char;
                for (int value = 0x002; value <= 0x007; ++value) point[value & 0x3f] = (char)value;
                for (int value = 0x00A; value <= 0x017; ++value) point[value & 0x3f] = (char)value;
                for (int value = 0x01A; value <= 0x01C; ++value) point[value & 0x3f] = (char)value;
                for (int value = 0x01F; value <= 0x01F; ++value) point[value & 0x3f] = (char)value;
                for (int value = 0x021; value <= 0x021; ++value) point[value & 0x3f] = (char)value;
                for (int value = 0x1EA; value <= 0x1EF; ++value) point[value & 0x3f] = (char)value;
            }
            public bool IsChar(char value)
            {
                value >>= 4;
                return data.Char[value & 0x3f] == value;
            }
            public void Dispose()
            {
                fastCSharp.unmanaged.Free(data.Data);
                data.Data = null;
            }
        }

解决方案 »

  1.   

    上面的代码有个BUG,没有处理0值        unsafe class uniqueHash : IDisposable
            {
                private fastCSharp.pointer data;
                public uniqueHash()
                {
                    data = fastCSharp.unmanaged.Get(sizeof(char) * 0x3f);
                    char* point = data.Char;
                    *point = (char)1;
                    for (int value = 0x002; value <= 0x007; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x00A; value <= 0x017; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x01A; value <= 0x01C; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x01F; value <= 0x01F; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x021; value <= 0x021; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x1EA; value <= 0x1EF; ++value) point[value & 0x3f] = (char)value;
                }
                public bool IsChar(char value)
                {
                    value >>= 4;
                    return data.Char[value & 0x3f] == value;
                }
                public void Dispose()
                {
                    fastCSharp.unmanaged.Free(data.Data);
                    data.Data = null;
                }
            }
      

  2.   

    csdn只能连发3贴,还有BUG,空间大小应该是0x40        unsafe class uniqueHash : IDisposable
            {
                private fastCSharp.pointer data;
                public uniqueHash()
                {
                    data = fastCSharp.unmanaged.Get(sizeof(char) * 0x3f);
                    char* point = data.Char;
                    *point = (char)1;
                    for (int value = 0x002; value <= 0x007; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x00A; value <= 0x017; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x01A; value <= 0x01C; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x01F; value <= 0x01F; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x021; value <= 0x021; ++value) point[value & 0x3f] = (char)value;
                    for (int value = 0x1EA; value <= 0x1EF; ++value) point[value & 0x3f] = (char)value;
                }
                public bool IsChar(char value)
                {
                    value >>= 4;
                    return data.Char[value & 0x3f] == value;
                }
                public void Dispose()
                {
                    fastCSharp.unmanaged.Free(data.Data);
                    data.Data = null;
                }
            }普通的数组模式        class uniqueHash
            {
                private char[] data;
                public unsafe uniqueHash()
                {
                    fixed (char* point = data = new char[0x40])
                    {
                        *point = (char)1;
                        for (int value = 0x002; value <= 0x007; ++value) point[value & 0x3f] = (char)value;
                        for (int value = 0x00A; value <= 0x017; ++value) point[value & 0x3f] = (char)value;
                        for (int value = 0x01A; value <= 0x01C; ++value) point[value & 0x3f] = (char)value;
                        for (int value = 0x01F; value <= 0x01F; ++value) point[value & 0x3f] = (char)value;
                        for (int value = 0x021; value <= 0x021; ++value) point[value & 0x3f] = (char)value;
                        for (int value = 0x1EA; value <= 0x1EF; ++value) point[value & 0x3f] = (char)value;
                    }
                }
                public bool IsChar(char value)
                {
                    value >>= 4;
                    return data[value & 0x3f] == value;
                }
            }
      

  3.   

    fastCSharp是个基于可编译模板的代码生成器基本框架,包含一些常用类库。fastCSharp.unmanaged.Get(sizeof(char) * 0x3f);因为楼主要运行效率,这个是申请非托管内存块当做char[]使用,可以避免数组的越界判断。
      

  4.   

    不是0x3fdata = fastCSharp.unmanaged.Get(sizeof(char) * 0x40);