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>