Partager via


Méthodes DateOnly et TimeOnly TryParse levées pour une entrée non valide

Les méthodes DateOnly et TimeOnlyTryParse et TryParseExact lèvent désormais une ArgumentException lorsqu'on fournit des valeurs DateTimeStyles ou des spécificateurs de format non valides. Cela aligne leur comportement avec d’autres TryParse API dans .NET.

Version introduite

.NET 11 Preview 2

Comportement antérieur

Auparavant, le passage de valeurs ou de spécificateurs de format non valides DateTimeStyles à DateOnly.TryParse, DateOnly.TryParseExactou TimeOnly.TryParseTimeOnly.TryParseExact provoquait le retour false des méthodes sans lever d’exception.

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

Nouveau comportement

À partir de .NET 11, passer des valeurs non valides ou des spécificateurs de format à ces méthodes génère une exception ArgumentException. L’exception inclut des détails sur l’argument non valide, tel que le nom du paramètre.

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')"
}

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Cette modification aligne le comportement des méthodes d’analyse DateOnly et TimeOnly avec celui des autres API TryParse dans .NET, qui lèvent des exceptions pour les arguments non valides. Le comportement précédent de retour false silencieux pour les arguments non valides peut masquer les erreurs de programmation et rendre le débogage plus difficile.

Passez en revue votre utilisation de DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse, et TimeOnly.TryParseExact afin de vous assurer que des spécificateurs de format et des valeurs DateTimeStyles valides sont passés. Si des arguments non valides sont possibles dans vos chemins de code, encapsulez les appels dans un try-catch bloc pour gérer .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 affectées