<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>