Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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)