我的一个客户有一个应用程序崩溃,我跟踪它由于这个错误/功能我无法解释.
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)
这是一张相同输出的图片:

我的问题是:这究竟是怎么回事?
更新:问题在于负数的时髦窗口设置.
如果这是客户端计算机上的输出(但不是您的或我们的),则用户的计算机可能已经专门配置窗口使用" - ?" 作为数字否定符号.Windows非常愿意让您这样做,或任何其他奇怪的格式.
作为一个测试,我只是在我的机器上配置Windows使用" - ?",并运行一个简单的控制台应用程序,像你的输出傻格式负数,就像你的示例输出.如果客户端机器上的情况如此,则GetHashCode的操作没有任何问题,它只是Windows格式的工件.
问题不在于GetHashCode(),问题在于Int32.ToString().知道用户格式化负数的首选项.控制面板+区域和语言,格式选项卡,附加设置按钮.数字选项卡,负号符号设置.在早期版本的Windows中,此对话框的工作方式略有不同,我描述了Windows 7版本.
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |