DateOnly- och TimeOnly TryParse-metoder genererar ogiltiga indata

Metoderna DateOnly och TimeOnlyTryParseTryParseExact genererar nu en ArgumentException när ogiltiga DateTimeStyles värden eller formatspecificerare anges. Detta justerar deras beteende med andra TryParse API:er i .NET.

Version lanserad

.NET 11 Förhandsversion 2

Tidigare beteende

Tidigare skickade ogiltiga DateTimeStyles värden eller formatspecificerare till DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParseeller TimeOnly.TryParseExact fick metoderna att returnera false utan att utlösa ett undantag.

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

Nytt beteende

Från och med .NET 11 genererar överföring av ogiltiga DateTimeStyles värden eller formatspecificerare till dessa metoder en ArgumentException. Undantaget innehåller information om det ogiltiga argumentet, till exempel parameternamnet.

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

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Den här ändringen justerar beteendet för DateOnly och TimeOnly-parsningsmetoderna till andra TryParse-API:er i .NET, som utlöser undantag för ogiltiga argument. Det tidigare beteendet att false tyst returnera för ogiltiga argument kan maskera programmeringsfel och göra felsökning svårare.

Granska din användning av DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParseoch TimeOnly.TryParseExact för att säkerställa att giltiga DateTimeStyles värden och formatspecificerare skickas. Om det finns risk för ogiltiga argument i dina kodvägar, omslut anropen i ett try-catch-block för att hantera 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
}

Berörda API:er