簡體   English   中英

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

[英]C# string.GetHashCode() returns non int result

我的一個客戶有一個應用程序崩潰,我跟蹤它由於這個錯誤/功能我無法解釋。
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

這是一張相同輸出的圖片:

奇怪的GetHashCode返回值

我的問題是:這究竟是怎么回事?

更新:問題在於負數的時髦窗口設置。

如果這是客戶端計算機上的輸出(但不是您的或我們的),則用戶的計算機可能已經專門配置窗口使用“ - ?” 作為數字否定符號。 Windows非常願意讓您這樣做,或任何其他奇怪的格式。

作為一個測試,我只是在我的機器上配置Windows使用“ - ?”,並運行一個簡單的控制台應用程序,像你的輸出傻格式負數,就像你的示例輸出。 如果客戶端機器上的情況如此,則GetHashCode的操作沒有任何問題,它只是Windows格式的工件。

問題不在於GetHashCode(),問題在於Int32.ToString()。 知道用戶格式化負數的首選項。 控制面板+區域和語言,格式選項卡,附加設置按鈕。 數字選項卡,負號符號設置。 在早期版本的Windows中,此對話框的工作方式略有不同,我描述了Windows 7版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM