<TimeSpan_LegacyFormatMode> Element

判斷執行階段是否保留具有 System.TimeSpan 值的格式化作業的舊版行為。

<configuration>
  <runtime>
    <TimeSpan_LegacyFormatMode>

Syntax

<TimeSpan_LegacyFormatMode
   enabled="true|false"/>

屬性和項目

下列章節說明屬性、子元素和父元素。

屬性

屬性 描述
enabled 必要屬性。

指定執行階段是否針對 System.TimeSpan 值使用舊版格式化行為。

啟用屬性

描述
false 執行階段不會還原舊版格式設定行為。
true 執行階段會還原舊版格式設定行為。

子元素

無。

父項目

元素 Description
configuration 通用語言執行平台和 .NET Framework 應用程式所使用之每個組態檔中的根項目。
runtime 包含有關執行階段初始化選項的資訊。

備註

從 .NET Framework 4 開始, System.TimeSpan 結構會 IFormattable 實作 介面,並支援使用標準和自訂格式字串進行格式化作業。 如果剖析方法遇到不支援的格式規範或格式字串,則會擲回 FormatException

在舊版的 .NET Framework 中 TimeSpan ,結構並未實 IFormattable 作,而且不支援格式字串。 不過,許多開發人員錯誤認為 TimeSpan 確實支援一組格式字串,並透過 String.Format 等方法在複合格式設定作業使用這些字串。 一般而言,如果類型實作 IFormattable 並支援格式字串,則呼叫具有不支援格式字串的格式化方法通常會擲回 FormatException。 不過,由於 TimeSpan 未實作 IFormattable,執行階段會忽略格式字串,而改為呼叫 TimeSpan.ToString() 方法。 這表示,雖然格式字串對格式化作業沒有任何影響,但其存在並不會導致 FormatException

對於舊版程式碼傳遞複合格式方法及無效格式字串的情況,並且無法重新編譯該程式碼,您可使用 <TimeSpan_LegacyFormatMode> 元素來還原舊版 TimeSpan 行為。 將此元素的 enabled 屬性設定為 true 時,複合格式方法會產生呼叫 TimeSpan.ToString() 而不是 TimeSpan.ToString(String, IFormatProvider),而且 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 或更新版本上執行範例,輸出會與範例在 3.5 .NET Framework 上執行時所產生的輸出相同。

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

另請參閱