Udostępnij za pośrednictwem


< > TimeSpan_LegacyFormatMode Element

Określa, czy środowisko wykonawcze zachowuje starsze zachowanie w operacjach formatowania z System.TimeSpan wartościami.

<konfiguracja>
   <Środowiska wykonawczego>
     <TimeSpan_LegacyFormatMode>

Składnia

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

Atrybuty i elementy

W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.

Atrybuty

Atrybut Opis
enabled Wymagany atrybut.

Określa, czy środowisko wykonawcze używa starszego zachowania formatowania z System.TimeSpan wartościami.

enabled Atrybut

Wartość Opis
false Środowisko wykonawcze nie przywraca starszego zachowania formatowania.
true Środowisko wykonawcze przywraca starsze zachowanie formatowania.

Elementy podrzędne

Żaden.

Elementy nadrzędne

Składnik Opis
configuration Element główny w każdym pliku konfiguracyjnym używanym przez środowisko uruchomieniowe języka wspólnego i aplikacje .NET Framework.
runtime Zawiera informacje o opcjach inicjalizacji środowiska wykonawczego.

Uwagi

Począwszy od .NET Framework 4, System.TimeSpan struktura implementuje IFormattable interfejs i obsługuje operacje formatowania za pomocą standardowych i niestandardowych ciągów formatu. Jeśli metoda analizowania napotka nieobsługiwany specyfikator formatu lub ciąg formatu, zgłasza plik FormatException.

W poprzednich wersjach .NET Framework TimeSpan struktura nie implementowała IFormattable i nie obsługiwała ciągów formatu. Jednak wielu programistów błędnie założyło, że TimeSpan obsługuje zestaw ciągów formatu i używało ich w operacjach formatowania złożonego za pomocą metod takich jak String.Format. Zwykle, jeśli typ implementuje IFormattable i obsługuje ciągi formatu, wywołania metod formatowania z nieobsługiwanymi ciągami formatu zwykle zgłaszają .FormatException Jednak ze względu na to, że TimeSpan nie zaimplementowano IFormattable, środowisko wykonawcze zignorowało ciąg formatu i zamiast tego wywołało metodę TimeSpan.ToString() . Oznacza to, że chociaż ciągi formatu nie miały wpływu na operację formatowania, ich obecność nie spowodowała powstania FormatExceptionpliku .

W przypadkach, w których starszy kod przekazuje metodę formatowania złożonego i nieprawidłowy ciąg formatu, a tego kodu nie można ponownie skompilować, można użyć tego <TimeSpan_LegacyFormatMode> elementu do przywrócenia starszego TimeSpan zachowania. Po ustawieniu atrybutu enabled tego elementu na true, metoda formatowania złożonego powoduje wywołanie metody TimeSpan.ToString() do, a nie TimeSpan.ToString(String, IFormatProvider), a nie FormatException jest zgłaszane.

Przykład

Poniższy przykład tworzy wystąpienie TimeSpan obiektu i próbuje sformatować go za String.Format(String, Object) pomocą metody przy użyciu nieobsługiwanego ciągu formatu standardowego.

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

Po uruchomieniu przykładu w .NET Framework 3.5 lub starszej wersji zostaną wyświetlone następujące dane wyjściowe:

12:30:45

Różni się to znacznie od danych wyjściowych, jeśli uruchomisz przykład w .NET Framework 4 lub nowszej wersji:

Invalid Format

Jeśli jednak dodasz następujący plik konfiguracji do katalogu przykładu, a następnie uruchomisz przykład w .NET Framework 4 lub nowszej wersji, dane wyjściowe będą identyczne z danymi wyjściowymi generowanymi przez przykład po uruchomieniu go w .NET Framework 3.5.

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

Zobacz też