Condividi tramite


< > TimeSpan_LegacyFormatMode Elemento

Determina se il runtime mantiene il comportamento legacy nelle operazioni di formattazione con System.TimeSpan i valori.

<configurazione>
   <Runtime>
     <TimeSpan_LegacyFormatMode>

Sintassi

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Descrizione
enabled Attributo obbligatorio.

Specifica se il runtime utilizza il comportamento di formattazione legacy con System.TimeSpan i valori.

Attributo abilitato

Valore Descrizione
false Il runtime non ripristina il comportamento di formattazione legacy.
true Il runtime ripristina il comportamento di formattazione legacy.

Elementi figli

Nessuno.

Elementi padre

Elemento Descrizione
configuration Elemento radice di ogni file di configurazione utilizzato da Common Language Runtime e dalle applicazioni .NET Framework.
runtime Contiene informazioni sulle opzioni di inizializzazione del runtime.

Osservazioni:

A partire da .NET Framework 4, la System.TimeSpan struttura implementa l'interfaccia IFormattable e supporta le operazioni di formattazione con stringhe di formato standard e personalizzate. Se un metodo di analisi rileva un identificatore di formato o una stringa di formato non supportato, genera un FormatExceptionfile .

Nelle versioni precedenti di .NET Framework, la TimeSpan struttura non implementava IFormattable e non supportava le stringhe di formato. Tuttavia, molti sviluppatori hanno erroneamente ipotizzato che TimeSpan supportasse un set di stringhe di formato e le hanno utilizzate in operazioni di formattazione composita con metodi quali String.Format. In genere, se un tipo implementa e supporta stringhe di IFormattable formato, le chiamate ai metodi di formattazione con stringhe di formato non supportate generano in genere un file .FormatException Tuttavia, poiché TimeSpan non è stato implementato IFormattable, il runtime ha ignorato la stringa di formato e ha invece chiamato il TimeSpan.ToString() metodo. Ciò significa che, sebbene le stringhe di formato non abbiano avuto alcun effetto sull'operazione di formattazione, la loro presenza non ha generato un FormatException.

Per i casi in cui il codice legacy passa un metodo di formattazione composito e una stringa di formato non valida e tale codice non può essere ricompilato, è possibile utilizzare l'elemento <TimeSpan_LegacyFormatMode> per ripristinare il comportamento legacy TimeSpan . Quando si imposta l'attributo enabled di questo elemento su true, il metodo di formattazione composito genera una chiamata a anziché TimeSpan.ToString(String, IFormatProvider)a TimeSpan.ToString() e non viene generato aFormatException.

Esempio

Nell'esempio seguente viene creata un'istanza di un TimeSpan oggetto e si tenta di formattarlo con il String.Format(String, Object) metodo utilizzando una stringa di formato standard non supportata.

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

Quando si esegue l'esempio in .NET Framework 3.5 o in una versione precedente, viene visualizzato l'output seguente:

12:30:45

Questo differisce notevolmente dall'output se si esegue l'esempio in .NET Framework 4 o versione successiva:

Invalid Format

Tuttavia, se si aggiunge il file di configurazione seguente alla directory dell'esempio e quindi si esegue l'esempio in .NET Framework 4 o in una versione successiva, l'output è identico a quello prodotto dall'esempio quando viene eseguito in .NET Framework 3.5.

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

Vedere anche