Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
DateOnly и TimeOnlyTryParse методы теперь вызывают TryParseExact, если предоставлены недопустимые значения DateTimeStyles или спецификаторы формата. Это соответствует их поведению с другими TryParse API в .NET.
Представленная версия
.NET 11 (предварительная версия 2)
Предыдущее поведение
Ранее передача недопустимых значений DateTimeStyles или спецификаторов формата DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse или TimeOnly.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 согласованным с другими API TryParse в .NET, позволяющими выбрасывать исключения при недопустимых аргументах. Предыдущее поведение по тихому возврату 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)