我的一个客户遇到了应用程序崩溃,我追踪它是由于这个错误/功能我无法解释
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();
}
这是文本输出:
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
这是相同输出的图片:
我的问题是:这究竟是怎么回事?
更新:问题在于负数的时髦窗口设置。
答案 0 :(得分:8)
如果这是客户端计算机上的输出(但不是您或我们的计算机上的输出),用户的计算机可能已经专门配置窗口使用“ - ?”作为数字否定符号。 Windows非常愿意让你这样做,或任何其他奇怪的格式。
作为一项测试,我只是在我的机器上配置了Windows以使用“ - ?”,并运行像您这样的简单控制台应用程序输出傻瓜格式的负数,就像您的示例输出一样。如果在客户端的机器上就是这种情况,那么GetHashCode的操作没有任何问题,它只是Windows格式的一个工件。
答案 1 :(得分:7)
问题不在于GetHashCode(),问题在于Int32.ToString()。知道用户格式化负数的首选项。控制面板+区域和语言,格式选项卡,附加设置按钮。数字选项卡,负号符号设置。这个对话框在早期版本的Windows中有点不同,我描述了Windows 7版本。