Condividi tramite


<> Elemento TimeSpan_LegacyFormatMode

Determina se il runtime mantiene il comportamento legacy nelle operazioni di formattazione con System.TimeSpan 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 usa il comportamento di formattazione legacy con System.TimeSpan valori.

Attributo enabled

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

Elementi figlio

Nessuno.

Elementi padre

Elemento Descrizione
configuration Elemento radice in ciascun file di configurazione usato in Common Language Runtime e nelle applicazioni .NET Framework.
runtime Contiene informazioni sulle opzioni di inizializzazione in fase di esecuzione.

Commenti

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'eccezione FormatException.

Nelle versioni precedenti di .NET Framework, la TimeSpan struttura non ha implementato IFormattable e non supporta le stringhe di formato. Tuttavia, molti sviluppatori presupporvano erroneamente che TimeSpan supportavano un set di stringhe di formato e li usavano nelle operazioni di formattazione composita con metodi come String.Format. In genere, se un tipo implementa IFormattable e supporta stringhe di formato, le chiamate ai metodi di formattazione con stringhe di formato non supportate generano in genere un'eccezione FormatException. Tuttavia, poiché TimeSpan non ha implementato IFormattable, il runtime ha ignorato la stringa di formato e ha invece chiamato il TimeSpan.ToString() metodo . Ciò significa che, anche se le stringhe di formato non hanno alcun effetto sull'operazione di formattazione, la loro presenza non ha generato un oggetto FormatException.

Nei 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 usare 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 composita restituisce una chiamata a TimeSpan.ToString() anziché TimeSpan.ToString(String, IFormatProvider)e non viene generata un'eccezione FormatException .

Esempio

L'esempio seguente crea un'istanza di un TimeSpan oggetto e tenta di formattarlo con il String.Format(String, Object) metodo usando 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

Ciò è diverso 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 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>

Vedi anche