次の方法で共有


<TimeSpan_LegacyFormatMode> エレメント

ランタイムが System.TimeSpan 値を使用した書式設定操作で従来の動作を保持するかどうかを決定します。

<構成>
   <実行中>
     <TimeSpan_LegacyFormatMode>

構文

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

属性と要素

次のセクションでは、属性、子要素、および親要素について説明します。

属性

特性 説明
enabled 必須属性。

ランタイムが System.TimeSpan 値を持つ従来の書式設定動作を使用するかどうかを指定します。

enabled 属性

価値 説明
false ランタイムは、従来の書式設定動作を復元しません。
true ランタイムは、従来の書式設定動作を復元します。

子要素

なし。

親の要素

要素 説明
configuration 共通言語ランタイムと .NET Framework アプリケーションで使用されるすべての構成ファイルのルート要素。
runtime ランタイム初期化オプションに関する情報が含まれています。

注釈

.NET Framework 4 以降、 System.TimeSpan 構造体は IFormattable インターフェイスを実装し、標準およびカスタムの書式指定文字列を使用した書式設定操作をサポートします。 解析メソッドでサポートされていない書式指定子または書式指定文字列が検出されると、 FormatExceptionがスローされます。

以前のバージョンの .NET Framework では、 TimeSpan 構造体は INT IFormattable を実装しておらず、書式指定文字列もサポートしていませんでした。 しかし、多くの開発者は、TimeSpanが一連の書式指定文字列をサポートしていると誤って想定し、String.Formatなどのメソッドを使用した複合書式設定操作でそれらを使用していました。 通常、型が IFormattable を実装し、書式指定文字列をサポートしている場合、サポートされていない書式指定文字列を使用して書式設定メソッドを呼び出すと、通常は FormatExceptionがスローされます。 ただし、 TimeSpanIFormattableを実装していなかったため、ランタイムは書式指定文字列を無視し、代わりに TimeSpan.ToString() メソッドを呼び出しました。 つまり、書式指定文字列は書式設定操作に影響を与えませんでしたが、その存在によって FormatExceptionは発生しませんでした。

レガシ コードが複合書式設定方法と無効な書式指定文字列を渡し、そのコードを再コンパイルできない場合は、 <TimeSpan_LegacyFormatMode> 要素を使用してレガシ TimeSpan の動作を復元できます。 この要素の enabled 属性を true に設定すると、複合書式設定メソッドは TimeSpan.ToString(String, IFormatProvider) ではなく TimeSpan.ToString() を呼び出すことになり、FormatExceptionはスローされません。

次の例では、 TimeSpan オブジェクトをインスタンス化し、サポートされていない標準の書式指定文字列を使用して String.Format(String, Object) メソッドで書式設定を試みます。

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

この例を .NET Framework 3.5 以前のバージョンで実行すると、次の出力が表示されます。

12:30:45

これは、.NET Framework 4 以降のバージョンで例を実行した場合の出力とは大きく異なります。

Invalid Format

ただし、次の構成ファイルを例のディレクトリに追加し、.NET Framework 4 以降のバージョンで例を実行すると、出力は .NET Framework 3.5 で実行したときに生成される出力と同じです。

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

こちらもご覧ください