Freigeben über


<TimeSpan_LegacyFormatMode>-Element

Bestimmt, ob die Runtime das Legacyverhalten bei Formatierungsvorgängen mit System.TimeSpan-Werten behält.

<configuration>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Syntax

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Attribute und Elemente

In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.

Attribute

attribute Beschreibung
enabled Erforderliches Attribut.

Gibt an, ob die Runtime eine Legacyformatierung für System.TimeSpan-Werte verwendet.

Enabled-Attribut

Wert BESCHREIBUNG
false Die Runtime stellt das Legacyformatierungsverhalten nicht wieder her.
true Die Runtime stellt das Legacyformatierungsverhalten wieder her.

Untergeordnete Elemente

Keine

Übergeordnete Elemente

Element BESCHREIBUNG
configuration Das Stammelement in jeder von den Common Language Runtime- und .NET Framework-Anwendungen verwendeten Konfigurationsdatei.
runtime Enthält Informationen über Laufzeitinitialisierungsoptionen.

Bemerkungen

Ab .NET Framework 4 implementiert die System.TimeSpan-Struktur die IFormattable-Schnittstelle und unterstützt Formatierungsvorgänge mit Standard- und benutzerdefinierten Formatzeichenfolgen. Wenn eine Analysemethode auf einen nicht unterstützten Formatbezeichner oder eine Formatzeichenfolge stößt, wird eine FormatException ausgelöst.

In früheren Versionen von .NET Framework wurde IFormattable von der TimeSpan-Struktur nicht implementiert und es wurden keine Formatzeichenfolgen unterstützt. Viele Entwickler gingen jedoch fälschlicherweise davon aus, dass TimeSpan eine Reihe von Formatzeichenfolgen unterstützt und verwendeten diese in zusammengesetzten Formatierungsvorgängen mit Methoden wie String.Format. Wenn ein Typ IFormattable implementiert und Formatzeichenfolgen unterstützt, lösen Aufrufe von Formatierungsmethoden mit nicht unterstützten Formatzeichenfolgen in der Regel eine FormatException aus. Da TimeSpan jedoch IFormattable nicht implementiert hat, ignorierte die Runtime die Formatzeichenfolge und ruft stattdessen die TimeSpan.ToString()-Methode auf. Dies bedeutet, dass, obwohl die Formatzeichenfolgen keine Auswirkungen auf den Formatierungsvorgang hatten, deren Anwesenheit nicht zu einer FormatException geführt haben.

In Fällen, in denen Legacycode eine zusammengesetzte Formatierungsmethode und eine ungültige Formatzeichenfolge übergibt und dieser Code nicht neu kompiliert werden kann, können Sie das <TimeSpan_LegacyFormatMode>-Element verwenden, um das Legacyverhalten TimeSpan wiederherzustellen. Wenn Sie das enabled-Attribut dieses Elements auf true festlegen, führt die zusammengesetzte Formatierungsmethode zu einem Aufruf von TimeSpan.ToString() anstelle von TimeSpan.ToString(String, IFormatProvider), und es wird keine FormatException ausgelöst.

Beispiel

Im folgenden Beispiel wird ein TimeSpan-Objekt instanziiert und versucht, es mit der String.Format(String, Object)-Methode mithilfe einer nicht unterstützten Standardformatzeichenfolge zu formatieren.

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

Wenn Sie das Beispiel auf .NET Framework 3.5 oder in einer früheren Version ausführen, wird die folgende Ausgabe angezeigt:

12:30:45

Dies unterscheidet sich deutlich von der Ausgabe, wenn Sie das Beispiel in .NET Framework 4 oder einer höheren Version ausführen:

Invalid Format

Wenn Sie jedoch dem Verzeichnis des Beispiels die folgende Konfigurationsdatei hinzufügen und dann das Beispiel in .NET Framework 4 oder einer höheren Version ausführen, ist die Ausgabe identisch mit der bei einer Ausführung des Beispiels in .NET Framework 3.5.

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

Siehe auch