<TimeSpan_LegacyFormatMode> 元素
确定运行时是否为旧的格式设置操作行为保留 System.TimeSpan 值。
configuration
runtime
<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 结构未实现 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 或更高版本上运行此示例,则输出将与示例在 .NET Framework 3.5 上运行时产生的输出相同。
<?xml version ="1.0"?>
<configuration>
<runtime>
<TimeSpan_LegacyFormatMode enabled="true"/>
</runtime>
</configuration>