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

标签 c# .net

我的一个客户发生了应用程序崩溃,由于这个我无法真正解释的错误/功能,我对其进行了追踪。
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

这是相同输出的图片:

Weird GetHashCode return value

我的问题是:这怎么可能?

更新:问题出在负数的时髦窗口设置上。

最佳答案

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

作为测试,我刚刚在我的机器上将 Windows 配置为使用“- ?”,并运行一个简单的控制台应用程序(如您的应用程序)输出愚蠢的格式负数,就像您的示例输出一样。如果在您的客户端机器上是这种情况,则 GetHashCode 的操作没有任何问题,它只是 Windows 格式化的产物。

关于C# string.GetHashCode() 返回非 int 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002208/

相关文章:

c# - 使用类名作为字符串将 python 类实例化为 C#

c# - 如何使用 C# 轻松上传文件到 Amazon S3

c# - WCF Web 服务 - 同一台服务器上的多跃点模拟

c# - 如何与 Entity Framework Code First 建立一对一关系

c# - DataGridTextColumn 不允许输入 "double"值

c# - 如何将 com 或 excel 对象序列化为二进制格式,以便我可以将其存储在 asp.net 的内存流中

c# - 如何在没有额外线程的情况下执行具有等待的任务

c# - IPagedList本地化

c# - CallBaseMethod () 是否适用于 FakeItEasy 中的虚拟属性?

c# - 使用 NHibernate 插入带有复合键的记录