通过


DateOnly 和 TimeOnly 的 TryParse 方法在无效输入时引发异常

提供无效DateTimeStyles值或格式说明符时,DateOnlyTimeOnlyTryParseTryParseExactArgumentException方法现在会引发DateTimeStyles。 这使其行为与 .NET 中的其他 TryParse API 保持一致。

已引入的版本

.NET 11 预览版 2

以前的行为

以前,将无效DateTimeStyles值或格式说明符传递给 DateOnly.TryParseDateOnly.TryParseExactTimeOnly.TryParseTimeOnly.TryParseExact导致方法返回false而不引发异常。

using System;
using System.Globalization;

bool result = DateOnly.TryParseExact(
    "2023-10-15",
    "yyyy-MM-dd",
    CultureInfo.InvariantCulture,
    (DateTimeStyles)999, // Invalid DateTimeStyles value
    out DateOnly date);

Console.WriteLine(result); // Output: False

新行为

从 .NET 11 开始,如果将无效的 DateTimeStyles 值或格式说明符传递给这些方法,将会引发 ArgumentException。 异常包括有关无效参数的详细信息,例如参数名称。

using System;
using System.Globalization;

try
{
    bool result = DateOnly.TryParseExact(
        "2023-10-15",
        "yyyy-MM-dd",
        CultureInfo.InvariantCulture,
        (DateTimeStyles)999, // Invalid DateTimeStyles value
        out DateOnly date);
}
catch (ArgumentException ex)
{
    Console.WriteLine(ex.Message);
    // Output: "The value '999' is not valid for DateTimeStyles. (Parameter 'style')"
}

破坏性变更的类型

此更改为行为更改

更改原因

此更改使DateOnlyTimeOnly解析方法的行为与 .NET 中其他TryParse API 一致,它们在遇到无效参数时都会抛出异常。 以无提示方式返回 false 无效参数的行为可能会屏蔽编程错误,并使调试更加困难。

审查您对DateOnly.TryParseDateOnly.TryParseExactTimeOnly.TryParseTimeOnly.TryParseExact的使用,以确保传递有效的DateTimeStyles值和格式说明符。 如果代码路径中可能存在无效参数,请将调用包装在try-catch块中以ArgumentException进行处理。

using System;
using System.Globalization;

try
{
    bool result = DateOnly.TryParseExact(
        "2023-10-15",
        "yyyy-MM-dd",
        CultureInfo.InvariantCulture,
        (DateTimeStyles)999, // Invalid DateTimeStyles value
        out DateOnly date);
}
catch (ArgumentException ex)
{
    Console.WriteLine($"Error: {ex.Message}");
    // Handle the exception as needed
}

受影响的 API