<> элемент 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>

См. также раздел