String.Format
и IFormattable.ToString
(нужное здесь форматирование) различны, но связаны между собой.
String.Format
требуется некоторая строка формата с заполнителями, а замещенные значения также могут иметь форматирование, если они реализуютIFormattable
интерфейс.
Console.WriteLine(String.Format("{0} KB", 42.ToString("###,###,###,##0.00")));
Форматирование 42 может быть встроено:
Console.WriteLine(String.Format("{0:###,###,###,##0.00} KB", 42));
Что может быть дополнительно упрощено интерполяцией:
Console.WriteLine($"{42:###,###,###,##0.00} KB"));
OfКонечно, 42
может быть переменной в интерполяции ($"{numValue:###,###,###,##0.00} KB}"
).Однако строка формата не может быть переменной, поэтому это не будет работать:
string format = "{x} KB";
Console.WriteLine($format); // does not compile, use String.Format in this case
Примечание:
Console.WriteLine
также поддерживает форматирование, поэтому приведенные выше примеры могутбыли написаны так:
Console.WriteLine("{0:###,###,###,##0.00} KB", 42);
Я использовал явное String.Format
, чтобы избежать путаницы.
Обновление
Если форматирование размера происходит от внешнегоисточник, вы не можете вставить его в строку формата, но это не проблема.Так что если у вас есть
string fileSizeFormat = "###,###,###,##0.00 KB";
Вы все еще можете использовать myFloatWithFileSize.ToString(fileSizeFormat)
.В этом случае String.Format
требуется, только если вы хотите встроить это в хорошее предложение или что-то в этом роде:
return String.Format("The size of the file: {0}", fileSize.ToString(fileSizeFormat));
или с интерполяцией:
return $"The size of the file: {fileSize.ToString(fileSizeFormat)}";