< > TimeSpan_LegacyFormatMode Element

确定运行时是否在对 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 行为。 将此元素的属性设置为 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>

另请参阅