确定运行时是否在对 values System.TimeSpan 进行格式化作时保留旧行为。
<配置>
<运行>
<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 行为。 将此元素的属性设置为 enabled
true
时,复合格式设置方法会导致调用 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>