確定運行時是否在對 values System.TimeSpan 進行格式化作時保留舊行為。
<configuration>
<runtime>
<TimeSpan_LegacyFormatMode>
語法
<TimeSpan_LegacyFormatMode
enabled="true|false"/>
屬性和元素
以下部分介紹屬性、子元素和父元素。
屬性
| 屬性 | 說明 |
|---|---|
enabled |
Required 屬性。 指定運行時是否對值使用舊格式設置行為 System.TimeSpan 。 |
enabled 屬性
| 價值 | 說明 |
|---|---|
false |
運行時不會恢復舊的格式設置行為。 |
true |
運行時將恢復舊格式設置行為。 |
子專案
沒有。
父元素
| 元素 | 說明 |
|---|---|
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 行為。 將此元素的屬性設置為 enabledtrue時,複合格式設置方法會導致調用 TimeSpan.ToString() 而不是 TimeSpan.ToString(String, IFormatProvider),並且不會引發 a 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>