Comparteix a través de


Los métodos DateOnly y TimeOnly TryParse lanzan una excepción ante entrada no válida

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.

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