Udostępnij za pośrednictwem


<> TimeSpan_LegacyFormatMode, element

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

<Konfiguracji>
  <Ś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 Atrybut wymagany.

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

Atrybut włączony

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

Elementy podrzędne

Brak.

Elementy nadrzędne

Element Opis
configuration Element główny w każdym pliku konfiguracji używanym przez środowisko uruchomieniowe języka wspólnego i aplikacje programu .NET Framework.
runtime Zawiera informacje dotyczące opcji inicjowania środowiska uruchomieniowego.

Uwagi

Począwszy od .NET Framework 4, System.TimeSpan struktura implementuje IFormattable interfejs i obsługuje operacje formatowania ze standardowymi i niestandardowymi ciągami formatu. Jeśli metoda analizowania napotka nieobsługiwany specyfikator formatu lub ciąg formatu, zgłasza wartość FormatException.

W poprzednich wersjach .NET Framework TimeSpan struktura nie zaimplementowała IFormattable i nie obsługiwała ciągów formatu. Jednak wielu deweloperów błędnie zakładało, że TimeSpan obsługuje zestaw ciągów formatu i używał ich w operacjach formatowania złożonego z metodami takimi jak String.Format. Zwykle, jeśli typ implementuje IFormattable ciągi formatu i obsługuje je, wywołuje metody formatowania z nieobsługiwanymi ciągami formatu zwykle zgłaszają wartość FormatException. Jednak ponieważ TimeSpan nie zaimplementowano IFormattable, środowisko uruchomieniowe zignorowało ciąg formatu i zamiast tego nazwało metodę TimeSpan.ToString() . Oznacza to, że chociaż ciągi formatu nie miały wpływu na operację FormatExceptionformatowania, ich obecność nie powodowała wystąpienia elementu .

W przypadku przypadków, w których starszy kod przekazuje metodę formatowania złożonego i nieprawidłowy ciąg formatu, a kod nie może być ponownie skompilowany, można użyć <TimeSpan_LegacyFormatMode> elementu w celu przywrócenia starszego TimeSpan zachowania. Po ustawieniu atrybutu enabled tego elementu na truewartość metoda formatowania złożonego powoduje wywołanie metody TimeSpan.ToString() zamiast TimeSpan.ToString(String, IFormatProvider), a element FormatException nie jest zgłaszany.

Przykład

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

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 wersji .NET Framework 3.5 lub starszej wersji zostaną wyświetlone następujące dane wyjściowe:

12:30:45

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

Invalid Format

Jeśli jednak dodasz następujący plik konfiguracji do katalogu przykładu, a następnie uruchom przykład w wersji .NET Framework 4 lub nowszej, dane wyjściowe są identyczne z danymi wygenerowaną przez przykład podczas uruchamiania w .NET Framework 3.5.

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

Zobacz też