提供无效DateTimeStyles值或格式说明符时,DateOnly和TimeOnlyTryParse及TryParseExactArgumentException方法现在会引发DateTimeStyles。 这使其行为与 .NET 中的其他 TryParse API 保持一致。
已引入的版本
.NET 11 预览版 2
以前的行为
以前,将无效DateTimeStyles值或格式说明符传递给 DateOnly.TryParse、DateOnly.TryParseExact或TimeOnly.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')"
}
破坏性变更的类型
此更改为行为更改。
更改原因
此更改使DateOnly和TimeOnly解析方法的行为与 .NET 中其他TryParse API 一致,它们在遇到无效参数时都会抛出异常。 以无提示方式返回 false 无效参数的行为可能会屏蔽编程错误,并使调试更加困难。
建议的操作
审查您对DateOnly.TryParse、DateOnly.TryParseExact、TimeOnly.TryParse和TimeOnly.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
- System.DateOnly.TryParse(String, DateOnly)
- System.DateOnly.TryParse(String, IFormatProvider, DateTimeStyles, DateOnly)
- System.DateOnly.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateOnly)
- System.DateOnly.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateOnly)
- System.TimeOnly.TryParse(String, TimeOnly)
- System.TimeOnly.TryParse(String, IFormatProvider, DateTimeStyles, TimeOnly)
- System.TimeOnly.TryParseExact(String, String, IFormatProvider, DateTimeStyles, TimeOnly)
- System.TimeOnly.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, TimeOnly)