Это разрушительное изменение.
См: Formatting and Parsing Time Intervals in the .NET Framework 4
In the .NET Framework 3.5 and earlier versions, TimeSpan does not implement IFormattable
, nor does it support format strings. Therefore, the “r” format string is ignored, and the parameterless TimeSpan.ToString method is called. In the .NET Framework 4, on the other hand, TimeSpan.ToString(String, IFormatProvider) is called and passed the unsupported format string, which causes the exception.
Просто расширить ответ, ваш исходный код в рамках .Net 2.0 будет не сгенерирует исключение, но это не даст вам желаемый результат, (минут: секунд). Поскольку конструктор с меньшим значением будет вызывать TimeSpan
, игнорируя формат, указанный в String.Format
. Но, с .Net framework 4.0 или hgiher, поскольку TimeSpan
реализует IFormattable
, указанный формат mm:ss
будет передан на вызов ToString
. Теперь этот формат mm:ss
недействителен для TimeSpan
, для этого требуется, чтобы двоеточие было экранировано с обратной косой чертой, например: mm\:ss
. Вот почему вы получаете исключение.
См: Custom TimeSpan Format Strings
В .Net 3.5 или понизить вы можете использовать:
TimeSpan elapsed = DateTime.Now - renderStartTime; //or DateTime.Now.Subtract(renderStartTime)
string formatted = string.Format("Init took {0}:{1}", elapsed.Minutes, elapsed.Seconds); //returns minutes and seconds components,
// If you are looking for Total Minutes and Total Seconds then use TotalMinutes/TotalSeconds
В .NET Framework 4.0 или выше вы можете сделать:
string.Format("Init took {0:mm\\:ss}", elapsed);
удалить литая объекта. –
согласился с @HighCore - это ненужный листинг, однако исключение все равно бросается без него – Matt
, как показано в ответах [здесь] (http://stackoverflow.com/questions/574881/how-can-i-string-format-a- timespan-object-with-a-custom-format-in-net) произошел сбой с форматированием TimeSpans от .NET 3.5 до .NET 4.0 – Jonesopolis