IntPtr in hexadezimale Zeichenfolge in string.Format

8

Beachten Sie, ich bin mir nicht ganz sicher, ob diese Frage zu dieser Seite gehört, aber ich versuche, konstruktiv zu sein.

Warum ist der Code

? %Vor%

Ausgabe

%Vor%

Warum wird die hexadezimale Formatierung nicht direkt auf das IntPtr Argument angewendet, wenn dies bei der Formatierung gewünscht wird? Gibt es Argumente gegen die Gestaltung der Funktionalität?
Wenn es keine Argumente gegen ein solches Design gibt, über welchen Kanal sollte ich dann dieses Problem an Microsoft melden?


Beachten Sie auch, dass der Debugger den IntPtr -Wert in Hex anzeigt, wenn dies gewünscht wird.
Ich finde, dass es ziemlich intuitiv und relativ häufige Möglichkeit wäre, IntPtr -Werte auszudrucken. Ich habe auch Code gefunden, der von anderen Leuten geschrieben wurde, die die erste Zeile benutzt haben und offensichtlich das hexadezimale Ergebnis erwartet haben, aber das Ergebnis war anders. Es hat auch einige Zeit gedauert, bis ich das Problem bemerkt habe, was das Verständnis der Protokollnachrichten erschwert hat.

    
Roland Pihlakas 11.11.2012, 14:26
quelle

2 Antworten

6

Für die Methode String.Format verwenden Sie eine Formatzeichenfolge für eine Argument muss das Argument die IFormattable -Schnittstelle implementieren.

Da der IntPtr -Typ IFormattable nicht implementiert, wird String.Format methode ruft nur die Methode "parameterless ToString " auf, um den Wert IntPtr in eine Zeichenfolge umzuwandeln.

    
Guffa 11.11.2012 14:37
quelle
2

Das liegt daran, dass IntPtr im ersten Fall nicht einer der integrierten Typen ist, die mit String.Format arbeiten, ptr.ToString() wird aufgerufen, um eine Zeichenkette zurückzugeben. Da die Formatierung erst nach der Konvertierung in eine Zeichenfolge angewendet wird, hat der X8-Formatbezeichner keine Auswirkung.

    
driis 11.11.2012 14:36
quelle

Tags und Links