Delen via


< > TimeSpan_LegacyFormatMode element

Hiermee bepaalt u of de runtime het verouderde gedrag behoudt bij het opmaken van bewerkingen met System.TimeSpan waarden.

<configuratie>
   <Runtime>
     <TimeSpan_LegacyFormatMode>

Syntaxis

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Attributen 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 verouderde opmaakgedrag niet.
true De runtime herstelt het verouderde opmaakgedrag.

Kind elementen

Geen.

Bovenliggende elementen

Onderdeel 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 .NET Framework 4 implementeert de structuur de IFormattable interface en ondersteunt het System.TimeSpan opmaakbewerkingen met standaard- en aangepaste opmaaktekenreeksen. Als een parseermethode een niet-ondersteunde formaatspecificatie of opmaaktekenreeks tegenkomt, wordt een FormatException.

In eerdere versies van .NET Framework werd de TimeSpan structuur niet geïmplementeerd IFormattable en ondersteunde deze geen notatietekenreeksen. Veel ontwikkelaars gingen er echter ten onrechte van uit dat dit TimeSpan wel degelijk een set opmaakreeksen ondersteunde en gebruikten deze bij samengestelde opmaakbewerkingen met methoden zoals String.Format. Normaal gesproken, als een type formaattekenreeksen implementeert IFormattable en ondersteunt, genereren aanroepen naar opmaakmethoden met niet-ondersteunde opmaaktekenreeksen meestal een FormatException. Echter, omdat TimeSpan niet geïmplementeerd IFormattable, negeerde de runtime de formaatreeks en riep in plaats daarvan de TimeSpan.ToString() methode aan. Dit betekent dat, hoewel de notatietekenreeksen geen effect hadden op de opmaakbewerking, hun aanwezigheid niet resulteerde in een FormatException.

In gevallen waarin verouderde code een samengestelde opmaakmethode en een ongeldige opmaaktekenreeks doorgeeft en die code niet opnieuw kan worden gecompileerd, kunt u het <TimeSpan_LegacyFormatMode> element gebruiken om het 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 van TimeSpan.ToString(String, IFormatProvider), en a FormatException wordt niet gegooid.

Voorbeeld

In het volgende voorbeeld wordt een TimeSpan object geïnstantieerd en wordt geprobeerd het op te maken met de String.Format(String, Object) methode met behulp van een niet-ondersteunde standaardnotatietekenreeks.

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 .NET Framework 3.5 of op een eerdere versie, wordt de volgende uitvoer weergegeven:

12:30:45

Dit verschilt aanzienlijk van de uitvoer als u het voorbeeld uitvoert op de .NET Framework 4 of latere versie:

Invalid Format

Als u echter het volgende configuratiebestand toevoegt aan de map van het voorbeeld en het voorbeeld vervolgens uitvoert op .NET Framework 4 of een 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>

Zie ook