<> TimeSpan_LegacyFormatMode element
Bepaalt of de runtime verouderd gedrag behoudt in opmaakbewerkingen met System.TimeSpan waarden.
<configuratie>
<Runtime>
<TimeSpan_LegacyFormatMode>
Syntax
<TimeSpan_LegacyFormatMode
enabled="true|false"/>
Kenmerken en elementen
In de volgende secties worden kenmerken, onderliggende elementen en bovenliggende elementen beschreven.
Kenmerken
Kenmerk | Beschrijving |
---|---|
enabled |
Vereist kenmerk. Hiermee geeft u op of de runtime gebruikmaakt van verouderd opmaakgedrag met System.TimeSpan waarden. |
ingeschakeld kenmerk
Waarde | Beschrijving |
---|---|
false |
De runtime herstelt het gedrag van verouderde opmaak niet. |
true |
De runtime herstelt het verouderde opmaakgedrag. |
Onderliggende elementen
Geen.
Bovenliggende elementen
Element | Beschrijving |
---|---|
configuration |
Het hoofdelement in elk configuratiebestand dat wordt gebruikt door de common language runtime en .NET Framework toepassingen. |
runtime |
Bevat informatie over opties voor runtime-initialisatie. |
Opmerkingen
Vanaf de .NET Framework 4 implementeert de structuur de System.TimeSpanIFormattable interface en ondersteunt de opmaakbewerkingen met tekenreeksen met standaard- en aangepaste notatie. Als een parseringsmethode een niet-ondersteunde notatieaanduiding of notatietekenreeks aantreft, genereert deze een FormatException.
In eerdere versies van de .NET Framework heeft de TimeSpan structuur geen opmaaktekenreeksen geïmplementeerd IFormattable en deze niet ondersteund. Veel ontwikkelaars gingen er echter ten onrechte van uit dat TimeSpan een set opmaaktekenreeksen werd ondersteund en gebruikten deze in samengestelde opmaakbewerkingen met methoden zoals String.Format. Als een type opmaaktekenreeksen IFormattable implementeert en ondersteunt, wordt doorgaans een FormatExceptionaangeroepen naar opmaakmethoden met niet-ondersteunde notatietekenreeksen. Omdat TimeSpan echter niet is geïmplementeerd IFormattable, heeft de runtime de notatietekenreeks genegeerd en in plaats daarvan de TimeSpan.ToString() methode aangeroepen. Dit betekent dat, hoewel de opmaaktekenreeksen geen invloed hadden op de opmaakbewerking, hun aanwezigheid niet heeft ges gevolg in een FormatException.
Voor gevallen waarin verouderde code een samengestelde opmaakmethode en een ongeldige opmaaktekenreeks doorgeeft en die code niet opnieuw kan worden gecompileerd, kunt u het element gebruiken om het <TimeSpan_LegacyFormatMode>
verouderde TimeSpan gedrag te herstellen. Wanneer u het enabled
kenmerk van dit element instelt op true
, resulteert de samengestelde opmaakmethode in een aanroep naar TimeSpan.ToString() in plaats TimeSpan.ToString(String, IFormatProvider)van , en wordt er FormatException geen gegenereerd.
Voorbeeld
In het volgende voorbeeld wordt een TimeSpan object geïnstitueerd en wordt geprobeerd het op te maken met de String.Format(String, Object) methode met behulp van een tekenreeks met een niet-ondersteunde standaardnotatie.
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
Wanneer u het voorbeeld uitvoert op de .NET Framework 3.5 of op een eerdere versie, wordt de volgende uitvoer weergegeven:
12:30:45
Dit wijkt duidelijk af van de uitvoer als u het voorbeeld uitvoert op de .NET Framework versie 4 of hoger:
Invalid Format
Als u echter het volgende configuratiebestand toevoegt aan de map van het voorbeeld en het voorbeeld vervolgens uitvoert op de .NET Framework 4 of latere versie, is de uitvoer identiek aan die van het voorbeeld wanneer het wordt uitgevoerd op .NET Framework 3.5.
<?xml version ="1.0"?>
<configuration>
<runtime>
<TimeSpan_LegacyFormatMode enabled="true"/>
</runtime>
</configuration>