DateOnly- en TimeOnly TryParse-methoden gooien een fout bij ongeldige invoer

De DateOnly en TimeOnlyTryParse en TryParseExact methoden gooien nu een ArgumentException wanneer ongeldige DateTimeStyles waarden of notatieaanduidingen worden opgegeven. Hiermee wordt het gedrag afgestemd op andere TryParse API's in .NET.

Geïntroduceerde versie

.NET 11 Preview 2

Vorig gedrag

Voorheen zorgde het doorgeven van ongeldige DateTimeStyles-waarden of opmaakaanduidingen aan DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse of TimeOnly.TryParseExact ervoor dat de methoden false teruggeven zonder een uitzondering te genereren.

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

Nieuw gedrag

Vanaf .NET 11 leidt het doorgeven van ongeldige DateTimeStyles waarden of opmaaknotaties aan deze methoden tot een ArgumentException. De uitzondering bevat details over het ongeldige argument, zoals de parameternaam.

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 van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Met deze wijziging wordt het gedrag van DateOnly en TimeOnly parseringsmethoden uitgelijnd met andere TryParse API's in .NET, waardoor uitzonderingen voor ongeldige argumenten worden veroorzaakt. Het vorige gedrag van het op de achtergrond retourneren false van ongeldige argumenten kan programmeerfouten maskeren en foutopsporing moeilijker maken.

Controleer uw gebruik van DateOnly.TryParse, DateOnly.TryParseExacten TimeOnly.TryParseTimeOnly.TryParseExact om ervoor te zorgen dat geldige DateTimeStyles waarden en notatieaanduidingen worden doorgegeven. Als er ongeldige argumenten mogelijk zijn in uw codepaden, verpakt u de aanroepen in een try-catch blok om ArgumentException te verwerken.

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
}

Betreffende API's