<> элемент TimeSpan_LegacyFormatMode
Определяет, сохраняет ли среда выполнения устаревшее поведение при операциях форматирования со значениями System.TimeSpan .
<Конфигурации>
<Среды выполнения>
<TimeSpan_LegacyFormatMode>
Синтаксис
<TimeSpan_LegacyFormatMode
enabled="true|false"/>
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние и родительские элементы.
Атрибуты
Атрибут | Описание |
---|---|
enabled |
Обязательный атрибут. Указывает, использует ли среда выполнения устаревшее поведение форматирования со значениями System.TimeSpan . |
Атрибут enabled
Значение | Описание |
---|---|
false |
Среда выполнения не восстанавливает устаревшее поведение форматирования. |
true |
Среда выполнения восстанавливает устаревшее поведение форматирования. |
Дочерние элементы
Отсутствует.
Родительские элементы
Элемент | Описание |
---|---|
configuration |
Корневой элемент в любом файле конфигурации, используемом средой CLR и приложениями .NET Framework. |
runtime |
Содержит сведения о параметрах инициализации среды выполнения. |
Комментарии
Начиная с платформа .NET Framework 4, System.TimeSpan структура реализует IFormattable интерфейс и поддерживает операции форматирования со стандартными и настраиваемыми строками форматирования. Если метод синтаксического анализа обнаруживает неподдерживаемый описатель формата или строку формата, он создает исключение FormatException.
В предыдущих версиях платформа .NET Framework TimeSpan структура не реализовывала IFormattable и не поддерживала строки формата. Однако многие разработчики ошибочно предположили, что TimeSpan поддерживает набор строк форматирования и используют их в операциях составного форматирования с помощью таких методов, как String.Format. Как правило, если тип реализует IFormattable и поддерживает строки форматирования, вызовы методов форматирования с неподдерживаемых строк формата обычно вызывают исключение FormatException. Однако, поскольку TimeSpan не реализует IFormattable, среда выполнения проигнорировала строку формата и вместо этого вызвала TimeSpan.ToString() метод . Это означает, что, хотя строки форматирования не оказали влияния на операцию форматирования, их присутствие не привело к созданию FormatException.
В случаях, когда устаревший код передает составной метод форматирования и недопустимую строку форматирования и этот код не может быть перекомпилирован, можно использовать <TimeSpan_LegacyFormatMode>
элемент для восстановления поведения прежних версий TimeSpan . Если для атрибута этого элемента задано значение enabled
, составной метод форматирования приводит к TimeSpan.ToString() вызову , а не TimeSpan.ToString(String, IFormatProvider), и FormatException исключение не вызывается.true
Пример
В следующем примере создается TimeSpan экземпляр объекта и предпринимается попытка отформатировать его с String.Format(String, Object) помощью метода , используя неподдерживаемую строку стандартного формата.
using System;
public class Example
{
public static void Main()
{
TimeSpan interval = new TimeSpan(12, 30, 45);
string output;
try {
output = String.Format("{0:r}", interval);
}
catch (FormatException) {
output = "Invalid Format";
}
Console.WriteLine(output);
}
}
Module Example
Public Sub Main()
Dim interval As New TimeSpan(12, 30, 45)
Dim output As String
Try
output = String.Format("{0:r}", interval)
Catch e As FormatException
output = "Invalid Format"
End Try
Console.WriteLine(output)
End Sub
End Module
При выполнении примера в платформа .NET Framework 3.5 или более ранней версии отображаются следующие выходные данные:
12:30:45
Это заметно отличается от выходных данных при выполнении примера в платформа .NET Framework 4 или более поздней версии:
Invalid Format
Однако если добавить следующий файл конфигурации в каталог примера, а затем запустить пример в платформа .NET Framework 4 или более поздней версии, выходные данные будут идентичны выходным данным, созданным в примере при его запуске в платформа .NET Framework 3.5.
<?xml version ="1.0"?>
<configuration>
<runtime>
<TimeSpan_LegacyFormatMode enabled="true"/>
</runtime>
</configuration>