<TimeSpan_LegacyFormatMode>, élément

Détermine si le runtime conserve le comportement hérité dans les opérations de mise en forme avec les valeurs System.TimeSpan.

<configuration>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Syntaxe

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Attributs et éléments

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.

Attributs

Attribut Description
enabled Attribut requis.

Indique si le runtime utilise le comportement de mise en forme hérité avec les valeurs System.TimeSpan.

Attribut enabled

Valeur Description
false Le runtime ne restaure pas le comportement de mise en forme hérité.
true Le runtime restaure le comportement de mise en forme hérité.

Éléments enfants

Aucune.

Éléments parents

Élément Description
configuration Élément racine de chaque fichier de configuration utilisé par le Common Language Runtime et les applications .NET Framework.
runtime Contient des informations sur les options d'initialisation du runtime.

Notes

À compter du .NET Framework 4, la structure System.TimeSpan implémente l’interface IFormattable et prend en charge les opérations de mise en forme avec des chaînes de format standard et personnalisées. Si une méthode d’analyse rencontre un spécificateur de format ou une chaîne de format non pris en charge, elle lève une FormatException.

Dans les versions précédentes du .NET Framework, la structure TimeSpan n’implémentait pas IFormattable et ne prenait pas en charge les chaînes de format. Toutefois, de nombreux développeurs ont supposé à tort que TimeSpan prenait en charge un ensemble de chaînes de format et les ont utilisées dans des opérations de mise en forme composite avec des méthodes telles que String.Format. Normalement, si un type implémente IFormattable et prend en charge des chaînes de format, les appels aux méthodes de mise en forme avec des chaînes de format non prises en charge lèvent généralement une FormatException. Toutefois, comme TimeSpan n’a pas implémenté IFormattable, le runtime a ignoré la chaîne de format et a appelé la méthode TimeSpan.ToString() à la place. Cela signifie que, même si les chaînes de format n’ont eu aucun effet sur l’opération de mise en forme, leur présence n’a pas entraîné de FormatException.

Dans les cas où le code hérité passe une méthode de mise en forme composite et une chaîne de format non valide, et où ce code ne peut pas être recompilé, vous pouvez utiliser l’élément <TimeSpan_LegacyFormatMode> pour restaurer le comportement TimeSpan hérité. Lorsque vous définissez l’attribut enabled de cet élément sur true, la méthode de mise en forme composite entraîne un appel à TimeSpan.ToString() plutôt qu’à TimeSpan.ToString(String, IFormatProvider), et une FormatException n’est pas levée.

Exemple

L’exemple suivant instancie un objet TimeSpan et tente de le mettre en forme avec la méthode String.Format(String, Object) en utilisant une chaîne de format standard non prise en charge.

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

Lorsque vous exécutez l’exemple sur .NET Framework 3.5 ou une version antérieure, la sortie suivante s’affiche :

12:30:45

Cela diffère nettement de la sortie si vous exécutez l’exemple sur .NET Framework 4 ou version ultérieure :

Invalid Format

Toutefois, si vous ajoutez le fichier de configuration suivant au répertoire de l’exemple, puis exécutez l’exemple sur .NET Framework 4 ou ultérieur, la sortie est identique à celle produite par l’exemple lorsqu’il est exécuté sur .NET Framework 3.5.

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

Voir aussi