Mein Programm speichert eine Punktwolke in einer Datei, wobei jede Punktwolke% Point3D[,]
vom System.Windows.Media.Media3D
-Namespace ist. Dies zeigt eine Zeile der Ausgabedatei (in Portugiesisch):
, während ich es gerne hätte (um danach richtig geparst zu werden):
%Vor%Der Codeblock, der die Datei generiert, ist hier:
%Vor% Es sieht so aus, als ob die double.NaN.ToString()
-Methode, die von Point3D.ToString()
aufgerufen wird, diese "zusätzliche Erklärung" in Klammern enthält, die ich gar nicht will.
Gibt es eine Möglichkeit, diese Methode zu ändern / zu überschreiben, so dass sie nur NaN
ohne den Klammerteil ausgibt?
Double.ToString()
verwendet NumberFormatInfo.CurrentInfo
, um seine Zahlen zu formatieren. Diese letzte Eigenschaft verweist auf die CultureInfo
, die derzeit im aktiven Thread festgelegt ist. Dies ist standardmäßig das aktuelle Gebietsschema des Benutzers. In diesem Fall ist es eine portugiesische Kulturumgebung. Verwenden Sie die Double.ToString(IFormatProvider)
Überladung, um dieses Verhalten zu vermeiden. In diesem Fall könnten Sie CultureInfo.InvariantCulture
verwenden.
Zusätzlich können Sie einfach das NaN-Symbol wechseln, wenn Sie alle anderen Markups beibehalten möchten. Standardmäßig sind Globalisierungsinformationen schreibgeschützt. Das Erstellen eines Klons wird dies umgehen.
%Vor% Um dies für den aktuellen Thread festzulegen, erstellen Sie eine Kopie der aktuellen Kultur und legen Sie die Informationen zum Zahlenformat für die Kultur fest. Pre .NET 4.5 kann nicht festgelegt werden für alle Threads. Nachdem Sie jeden Thread erstellt haben, müssen Sie eine korrekte CultureInfo
sicherstellen. Ab .NET 4.5 gibt es CultureInfo.DefaultThreadCurrentCulture
, das die Standardkultur für Threads innerhalb von AppDomain
definiert. Diese Einstellung wird nur berücksichtigt, wenn die Kultur des Threads noch nicht festgelegt wurde (siehe MSDN).
Beispiel für einen einzelnen Thread:
%Vor% Zunächst ist die Antwort von Caramiriel die Lösung, die double.NaN
durch eine beliebige Zeichenfolge repräsentiert, die Sie wünschen.
Übrigens, ich möchte die Zeichenfolge "NaN"
, und hier ist was die Dokumente sagen über NumberFormatInfo.NaNSymbol
:
Die Zeichenfolge, die den Wert IEEE NaN (keine Zahl) darstellt. Der Standardwert für InvariantInfo ist "NaN".
Dann habe ich herausgefunden, wie ich meinen gewünschten reinen "NaN" -String habe und entferne den Komma-Separator, indem ich die Vorgabe von InvariantCultureInfo
benutze, füge die folgende Zeile hinzu, direkt nachdem der aktuelle Thread erstellt wurde:
Und das hat gut funktioniert!