<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>

另请参阅