我的一个客户发生了应用程序崩溃,由于这个我无法真正解释的错误/功能,我对其进行了追踪。
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
这是相同输出的图片:
我的问题是:这怎么可能?
更新:问题出在负数的时髦窗口设置上。
最佳答案
如果这是客户端计算机上的输出(但不是您或我们的计算机),则用户的计算机可能已将窗口专门配置为使用“-?”作为数字负号。 Windows 非常愿意让您这样做,或任何其他奇怪的格式。
作为测试,我刚刚在我的机器上将 Windows 配置为使用“- ?”,并运行一个简单的控制台应用程序(如您的应用程序)输出愚蠢的格式负数,就像您的示例输出一样。如果在您的客户端机器上是这种情况,则 GetHashCode 的操作没有任何问题,它只是 Windows 格式化的产物。
关于C# string.GetHashCode() 返回非 int 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002208/