Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Los métodos DateOnly y TimeOnlyTryParseTryParseExact ahora inician una excepción ArgumentException cuando se proporcionan valores DateTimeStyles o especificadores de formato DateTimeStyles no válidos. Esto alinea su comportamiento con otras TryParse API de .NET.
Versión introducida
.NET 11 Preview 2
Comportamiento anterior
Anteriormente, pasar valores o especificadores de formato no válidos DateTimeStyles a DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParseo TimeOnly.TryParseExact hacía que los métodos se devolvan false sin producir una excepción.
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
Nuevo comportamiento
A partir de .NET 11, pasar valores DateTimeStyles no válidos o especificadores de formato a estos métodos produce una ArgumentException. La excepción incluye detalles sobre el argumento no válido, como el nombre del parámetro.
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')"
}
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio alinea el comportamiento de DateOnly y TimeOnly con los métodos de análisis sintáctico de otras APIs de .NET, que lanzan excepciones para argumentos no válidos. El comportamiento anterior de la devolución false silenciosa de argumentos no válidos podría enmascarar los errores de programación y dificultar la depuración.
Acción recomendada
Revise el uso de DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse y TimeOnly.TryParseExact para asegurarse de que se pasan valores válidos DateTimeStyles y especificadores de formato. Si es posible que los argumentos no válidos aparezcan en las rutas de acceso del código, envuelve las llamadas en un bloque try-catch para manejar 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
}
Las APIs afectadas
- 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)