我的一個客戶有一個應用程序崩潰,我跟蹤它,因爲這個錯誤/功能我不能真正解釋。
WindowsIdentity.GetCurrent()。Name.GetHashCode()返回下面的字符串: - ?2097695743
是的,那是一個負號,一個空格,一個問號,然後是實際的散列號。C#string.GetHashCode()返回非int結果
這是一個簡單的控制檯應用程序的代碼,顯示怪異的行爲。
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設置。
不是。我懷疑終端是瘋子。 (唯一的另一種可能性是'int.ToString()'不正確,但我懷疑這一點。) – 2011-11-03 21:39:01
如果使用'>'將控制檯應用程序的輸出寫入文件,那該怎麼辦(例如'yourApp.exe'> out.txt')或使用類似於'File.WriteAllText()'或'Debug.WriteLine()'? – fardjad
這可能是文化衝突。什麼'Name.GetHashCode()。ToString(CultureInfo.InvariantCulture)'print? –