Elemento <TimeSpan_LegacyFormatMode>

Determina se o runtime preserva o comportamento herdado em operações de formatação com System.TimeSpan valores.

<configuração>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Syntax

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
enabled Atributo obrigatório.

Especifica se o runtime usa uma formatação herdada de comportamento com valores de System.TimeSpan.

Atributo habilitado

Valor Descrição
false O runtime não restaura o comportamento de formatação herdado.
true O runtime restaura o comportamento de formatação herdado.

Elementos filho

Nenhum.

Elementos pai

Elemento Descrição
configuration O elemento raiz em cada arquivo de configuração usado pelos aplicativos do Common Language Runtime e .NET Framework.
runtime Contém informações sobre opções de inicialização do runtime.

Comentários

A partir do .NET Framework 4, a estrutura System.TimeSpan implementa a interface IFormattable e dá suporte a operações de formatação com cadeias de caracteres de formato padrão e personalizado. Se um método de análise encontrar um especificador de formato sem suporte ou uma cadeia de caracteres de formato, ele gerará um FormatException.

Em versões anteriores do .NET Framework, a estrutura TimeSpan não implementava IFormattable e não dava suporte a cadeias de caracteres de formato. No entanto, muitos desenvolvedores assumiram erroneamente que TimeSpan oferecia suporte a um conjunto de cadeias de caracteres de formato e os usavam em operações de formatação composta com métodos como String.Format. Normalmente, se um tipo implementa IFormattable e dá suporte a cadeias de caracteres de formato, chamadas para métodos de formatação com cadeias de caracteres de formato sem suporte geralmente geram um FormatException. No entanto, como TimeSpan não implementou IFormattable, o runtime ignorou a cadeia de caracteres de formato e, em vez disso, chamou o método TimeSpan.ToString(). Isso significa que, embora as cadeias de caracteres de formato não tenham efeito na operação de formatação, sua presença não resultou em um FormatException.

Para casos em que o código herdado passa um método de formatação composta e uma cadeia de caracteres de formato inválida, e esse código não pode ser recompilado, você pode usar o elemento <TimeSpan_LegacyFormatMode> para restaurar o comportamento herdado TimeSpan. Quando você define o atributo enabled desse elemento como true, o método de formatação composta resulta em uma chamada para TimeSpan.ToString() em vez de TimeSpan.ToString(String, IFormatProvider), e um FormatException não é lançado.

Exemplo

O exemplo a seguir cria uma instância de um objeto TimeSpan e tenta formatá-lo com o método String.Format(String, Object) usando uma cadeia de caracteres de formato padrão sem suporte.

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

Quando você executa o exemplo no .NET Framework 3.5 ou em uma versão anterior, ele exibe a seguinte saída:

12:30:45

Isso difere significativamente da saída se você executar o exemplo na versão .NET Framework 4 ou posterior:

Invalid Format

No entanto, se você adicionar o arquivo de configuração a seguir ao diretório do exemplo e executar o exemplo no .NET Framework 4 ou posterior, a saída será idêntica à produzida pelo exemplo quando ele é executado no .NET Framework 3.5.

<?xml version ="1.0"?>
<configuration>
   <runtime>
      <TimeSpan_LegacyFormatMode enabled="true"/>
   </runtime>
</configuration>

Confira também