[英]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
這是一張相同輸出的圖片:
我的問題是:這究竟是怎么回事?
更新:問題在於負數的時髦窗口設置。
如果這是客戶端計算機上的輸出(但不是您的或我們的),則用戶的計算機可能已經專門配置窗口使用“ - ?” 作為數字否定符號。 Windows非常願意讓您這樣做,或任何其他奇怪的格式。
作為一個測試,我只是在我的機器上配置Windows使用“ - ?”,並運行一個簡單的控制台應用程序,像你的輸出傻格式負數,就像你的示例輸出。 如果客戶端機器上的情況如此,則GetHashCode的操作沒有任何問題,它只是Windows格式的工件。
問題不在於GetHashCode(),問題在於Int32.ToString()。 知道用戶格式化負數的首選項。 控制面板+區域和語言,格式選項卡,附加設置按鈕。 數字選項卡,負號符號設置。 在早期版本的Windows中,此對話框的工作方式略有不同,我描述了Windows 7版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.