2011-11-03 7 views
7

一つは、アプリのクラッシュを持っていたし、私が原因私は本当に説明できないこのバグ/機能にそれをトレースする非整数の結果を返します。
WindowsIdentity.GetCurrent()。Name.GetHashCode()は、次の文字列を返します。 - ?2097695743
はい、マイナススペース、疑問符、実際のハッシュ番号です。C#string.GetHashCode()私のクライアントの

これは、奇妙な動作を示す単純なコンソールアプリケーションのコードです。

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

私の質問は:地球上で可能これでどう?

UPDATE:問題は、負の数のファンキーなウィンドウの設定にありました。

+2

これはありません。私は端末が嫌な人だと思う。 (唯一の他の可能性は 'int.ToString()'が間違っていることですが、私はそれを疑っています) –

+0

'>'を使ってコンソールアプリケーションの出力をファイルに書き込むとout.txt')、 'File.WriteAllText()'や 'Debug.WriteLine()'のようなものを使用しますか? – fardjad

+4

カルチャークラッシュかもしれません。 'Name.GetHashCode()。ToString(CultureInfo.InvariantCulture)'とは何ですか? –

答えて

8

それが(ただし、あなたや私たち)は、クライアントのコンピュータに出力された場合、それはユーザーのマシンは、特に使用するようにWindowsを設定している可能性です「 - ?」数字の負の記号として使用します。 Windowsは、あなたがそれを行うことを完全に喜んで、または他の奇妙なフォーマットです。試験として

、私はちょうど使用する私のマシン上でWindowsを構成し、「 - ?」と、あなたの出力のような単純なコンソールアプリケーションを実行している間抜けは自分の出力例のように、負の数をフォーマットされました。これがクライアントのマシンの場合、GetHashCodeの操作に何も問題はありません.Windowsの書式設定の成果物に過ぎません。

+0

これを最初に答えとしてマークします。どちらも正しいです。 –

7

問題がGetHashCodeメソッド(ではない)、問題が)(Int32.ToStringです。負の数をフォーマットするためのユーザーの好みを認識している。コントロールパネル+地域と言語、形式タブ、追加設定ボタン。 「Numbers」タブ、「Negative sign symbol」の設定このダイアログは、以前のバージョンのWindowsでは少し違って動作しますが、Windows 7のバージョンについて説明しました。

関連する問題