Поделиться через


<TimeSpan_LegacyFormatMode> Элемент

Определяет, сохраняет ли среда выполнения устаревшее поведение при операциях форматирования со System.TimeSpan значениями.

<configuration>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Синтаксис

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Атрибуты и элементы

В следующих разделах описываются атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Описание
enabled Обязательный атрибут.

Указывает, использует ли среда выполнения устаревшее поведение форматирования со System.TimeSpan значениями.

включенный атрибут

Ценность Описание
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 этого элемента задано значение true, метод составного форматирования приводит к вызову вместо TimeSpan.ToString()TimeSpan.ToString(String, IFormatProvider), и a FormatException не генерируется.

Пример

В следующем примере создается экземпляр объекта и предпринимается 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>

См. также