Elemento <TimeSpan_LegacyFormatMode>

Determina si el tiempo de ejecución conserva el comportamiento heredado en las operaciones de formato con valores System.TimeSpan.

<configuration>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Sintaxis

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Descripción
enabled Atributo necesario.

Especifica si el tiempo de ejecución usa un comportamiento de formato heredado con los valores System.TimeSpan.

Atributo enabled

Valor Descripción
false El tiempo de ejecución no restaura el comportamiento de formato heredado.
true El tiempo de ejecución restaura el comportamiento de formato heredado.

Elementos secundarios

Ninguno.

Elementos primarios

Elemento Descripción
configuration Elemento raíz de cada archivo de configuración usado por las aplicaciones de Common Language Runtime y .NET Framework.
runtime Contiene información sobre las opciones de inicialización del motor en tiempo de ejecución.

Comentarios

A partir de .NET Framework 4, la estructura System.TimeSpan implementa la interfaz IFormattable y admite operaciones de formato con cadenas de formato estándar y personalizadas. Si un método de análisis encuentra un especificador de formato o una cadena de formato no admitidos, se produce una excepción FormatException.

En versiones anteriores de .NET Framework, la estructura TimeSpan no implementaba IFormattable y no admitía cadenas de formato. Sin embargo, muchos desarrolladores daban por sentado por error que TimeSpan admitía un conjunto de cadenas de formato y lo usaba en operaciones de formato compuesto con métodos como String.Format. Normalmente, si un tipo implementa IFormattable y admite cadenas de formato, las llamadas a métodos de formato con cadenas de formato no admitidas suelen producir una excepción FormatException. Sin embargo, dado que TimeSpan no implementaba IFormattable, el tiempo de ejecución omitía la cadena de formato y, en su lugar, llamaba al método TimeSpan.ToString(). Esto significa que, aunque las cadenas de formato no tenían ningún efecto en la operación de formato, su presencia no daba como resultado una FormatException.

En los casos en los que el código heredado pasa un método de formato compuesto y una cadena de formato no válida, y ese código no se puede volver a compilar, puede usar el elemento <TimeSpan_LegacyFormatMode> para restaurar el comportamiento heredado TimeSpan. Cuando se establece el atributo enabled de este elemento en true, el método de formato compuesto da como resultado una llamada a TimeSpan.ToString() en lugar de TimeSpan.ToString(String, IFormatProvider), y no se produce una excepción FormatException.

Ejemplo

En el ejemplo siguiente se crea una instancia de un objeto TimeSpan y se intenta dar formato con el método String.Format(String, Object) mediante una cadena de formato estándar no compatible.

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

Al ejecutar el ejemplo en .NET Framework 3.5 o en una versión anterior, se muestra el resultado siguiente:

12:30:45

Esto difiere bastante del resultado que se obtiene si se ejecuta el ejemplo en .NET Framework 4 o una versión posterior:

Invalid Format

Sin embargo, si agrega el siguiente archivo de configuración al directorio del ejemplo y, a continuación, ejecuta el ejemplo en .NET Framework 4, o en una versión posterior, el resultado es idéntico al que produce el ejemplo cuando se ejecuta en .NET Framework 3.5.

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

Consulte también