Metode DateOnly dan TimeOnly TryParse melempar untuk input yang tidak valid

Metode DateOnly, TimeOnlyTryParse, dan TryParseExact sekarang menghasilkan ArgumentException ketika penentu format atau nilai DateTimeStyles yang tidak valid disediakan. Ini menyelaraskan perilaku mereka dengan API lain TryParse di .NET.

Versi yang diperkenalkan

.NET 11 Pratinjau 2

Perilaku sebelumnya

Sebelumnya, meneruskan nilai atau penentu format DateTimeStyles yang tidak valid ke DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse, atau TimeOnly.TryParseExact menyebabkan metode mengembalikan false tanpa melempar pengecualian.

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

Perilaku baru

Mulai dari .NET 11, penerusan penggunaan DateTimeStyles atau penentu format yang tidak valid ke metode ini akan melemparkan ArgumentException. Pengecualian mencakup detail tentang argumen yang tidak valid, seperti nama parameter.

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

Jenis perubahan yang memutus kompatibilitas

Perubahan ini adalah perubahan perilaku.

Alasan perubahan

Perubahan ini menyelaraskan perilaku metode penguraian DateOnly dan TimeOnly dengan API lainnya TryParse di .NET, yang melempar pengecualian terhadap argumen yang tidak valid. Perilaku sebelumnya yang mengembalikan false secara diam-diam untuk argumen yang tidak valid dapat menutupi kesalahan pemrograman dan membuat proses debugging lebih sulit.

Tinjau penggunaan Anda dari DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParse, dan TimeOnly.TryParseExact untuk memastikan bahwa DateTimeStyles berisi nilai dan penentu format yang valid. Jika argumen yang tidak valid dimungkinkan di jalur kode Anda, bungkus panggilan dalam blok try-catch untuk menangani masalah terkait 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 yang Terpengaruh