Ich habe eine einfache Klasse, die eine Eigenschaft Format
enthält, die auf einen beliebigen angegebenen Formatbezeichner eingestellt ist. Ich verwende dann die Eigenschaft dieser Klasse, um, wie der Name schon sagt, die Zeichenkette zu formatieren.String-Format gibt unerwartete Ergebnisse zurück
Nehmen Sie das folgende Beispiel:
public class FormatDefinition {
public string Format { get; set; }
}
class Program {
static void Main() {
var formatDefinition = new FormatDefinition {
Format = "N"
};
var number = 20.5;
var formatOne = string.Format("{0:" + formatDefinition.Format + "}", number);
var formatTwo = string.Format("{0:formatDefinition.Format}", number);
var formatThree = $"{number:formatDefinition.Format}";
Console.WriteLine(formatOne); // 20.5
Console.WriteLine(formatTwo); // formatDefinition21Format
Console.WriteLine(formatThree); // formatDefinition21Format
Console.ReadLine();
}
}
Kann jemand bitte erklären, warum formatTwo
und formatThree
ein Ergebnis von formatDefinition21Format
haben? Es scheint, dass der Zeitraum .
durch die formatierte Zahl ersetzt wird.
Sie geben einen [benutzerdefinierten numerischen Formatstring] (https://msdn.microsoft.com/en-us/library/0c899ak8.aspx) an, der aus dem String '" formatDefinition.Format "' besteht. Dies bedeutet * konstante Zeichenkette "formatDefinition" * gefolgt vom Dezimalpunkt (und daher die ganze Zahl hier) gefolgt von * konstanter Zeichenkette "Format" *. Die Zahl wird auf Null Dezimalstellen gerundet, da nach dem Dezimaltrennzeichen keine Ziffern angegeben sind. Die Zeichenfolge 'formatDefinition.Format' wird nicht als C# -Code interpretiert. – Blorgbeard
C# führt keine String-Interpolation bei allen vorherigen C# 6 durch, und selbst dann müssen Sie dem Compiler mitteilen, dass es das ist, was Sie wollen. –
@blorgbeard das macht völlig Sinn und ist die klarste Antwort auf mich. Vielen Dank für Ihr Feedback. Wenn Sie es als Antwort hinzufügen, akzeptiere ich. – Sam