C#string.GetHashCode()返回非int结果

Mla*_*dic 7 .net c#

我的一个客户有一个应用程序崩溃,我跟踪它由于这个错误/功能我无法解释.
WindowsIdentity.GetCurrent().Name.GetHashCode()返回此字符串: - ?2097695743
是,那是一个减号,一个空格,一个问号,然后是实际的哈希数.

这是一个简单的控制台应用程序的代码,显示了奇怪的行为.

static void Main(string[] args)
{
    Console.WriteLine("From String: string name = WindowsIdentity.GetCurrent().Name");            
    string name = WindowsIdentity.GetCurrent().Name;
    Console.WriteLine("name:                            " + name);
    Console.WriteLine("name.GetHashCode().GetType():    " + name.GetHashCode().GetType());
    Console.WriteLine("name.GetHashCode():              " + name.GetHashCode());
    Console.WriteLine("name.GetHashCode().ToString():   " + name.GetHashCode().ToString());
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("Direct");
    Console.WriteLine("WindowsIdentity.GetCurrent().Name:                           " + WindowsIdentity.GetCurrent().Name);
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().GetType():   " + WindowsIdentity.GetCurrent().Name.GetHashCode().GetType());
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode():             " + WindowsIdentity.GetCurrent().Name.GetHashCode());
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().ToString():  " + WindowsIdentity.GetCurrent().Name.GetHashCode().ToString());
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("Press Enter to continue");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

这是文本输出:

From String: string name = WindowsIdentity.GetCurrent().Name
name:                            COMMARC\tje
name.GetHashCode().GetType():    System.Int32
name.GetHashCode():              - ?2097695743
name.GetHashCode().ToString():   - ?2097695743

Direct
WindowsIdentity.GetCurrent().Name:                           COMMARC\tje
WindowsIdentity.GetCurrent().Name.GetHashCode().GetType():   System.Int32
WindowsIdentity.GetCurrent().Name.GetHashCode():             - ?2097695743
WindowsIdentity.GetCurrent().Name.GetHashCode().ToString():  - ?2097695743


Press Enter to continue
Run Code Online (Sandbox Code Playgroud)

这是一张相同输出的图片:

奇怪的GetHashCode返回值

我的问题是:这究竟是怎么回事?

更新:问题在于负数的时髦窗口设置.

hat*_*ica 8

如果这是客户端计算机上的输出(但不是您的或我们的),则用户的计算机可能已经专门配置窗口使用" - ?" 作为数字否定符号.Windows非常愿意让您这样做,或任何其他奇怪的格式.

作为一个测试,我只是在我的机器上配置Windows使用" - ?",并运行一个简单的控制台应用程序,像你的输出傻格式负数,就像你的示例输出.如果客户端机器上的情况如此,则GetHashCode的操作没有任何问题,它只是Windows格式的工件.


Han*_*ant 7

问题不在于GetHashCode(),问题在于Int32.ToString().知道用户格式化负数的首选项.控制面板+区域和语言,格式选项卡,附加设置按钮.数字选项卡,负号符号设置.在早期版本的Windows中,此对话框的工作方式略有不同,我描述了Windows 7版本.