Udostępnij za pośrednictwem


Metody DateOnly i TimeOnly TryParse zgłaszają nieprawidłowe dane wejściowe

Metody DateOnly oraz TimeOnlyTryParseTryParseExact teraz zgłaszają ArgumentException, gdy zostaną podane nieprawidłowe DateTimeStyles wartości lub specyfikatory formatu. Jest to zgodne z zachowaniem innych API w .NET.

Wersja wprowadzona

.NET 11 (wersja zapoznawcza 2)

Poprzednie zachowanie

Wcześniej przekazywanie nieprawidłowych DateTimeStyles wartości lub specyfikatorów formatu do DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse lub TimeOnly.TryParseExact powodowało, że metody zwracały false bez zgłaszania wyjątku.

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

Nowe zachowanie

Począwszy od platformy .NET 11, przekazywanie nieprawidłowych DateTimeStyles wartości lub specyfikatorów formatu do tych metod zgłasza błąd ArgumentException. Wyjątek zawiera szczegółowe informacje o nieprawidłowym argumencie, takim jak nazwa parametru.

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 zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Ta zmiana wyrównuje zachowanie metod analizujących DateOnly i TimeOnly z innymi API TryParse w .NET, które zgłaszają wyjątki dla nieprawidłowych argumentów. Poprzednie zachowanie dyskretnego zwracania false nieprawidłowych argumentów może maskować błędy programowania i utrudniać debugowanie.

Przejrzyj użycie wartości DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParsei TimeOnly.TryParseExact , aby upewnić się, że przekazywane są prawidłowe DateTimeStyles wartości i specyfikatory formatu. Jeśli w ścieżkach kodu są możliwe nieprawidłowe argumenty, opakuj wywołania w blok try-catch, aby obsłużyć 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
}

Interfejsy API, których dotyczy problem