次の方法で共有


DateOnly.TryParse メソッドと TimeOnly.TryParse メソッドは無効な入力に対して例外をスローします。

指定されたDateTimeStyles値が無効または書式指定子が不正な場合、DateOnlyTimeOnlyTryParse、およびTryParseExactメソッドがArgumentExceptionをスローするようになりました。 これにより、.NET の他の TryParse API と動作が調整されます。

導入されたバージョン

.NET 11 Preview 2

以前の動作

以前は、無効な DateTimeStyles 値または書式指定子を DateOnly.TryParseDateOnly.TryParseExactTimeOnly.TryParse、または TimeOnly.TryParseExact に渡すと、メソッドは例外をスローせずに false を返しました。

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

新しい動作

.NET 11 以降では、無効な DateTimeStyles 値または書式指定子をこれらのメソッドに渡すと、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(ex.Message);
    // Output: "The value '999' is not valid for DateTimeStyles. (Parameter 'style')"
}

破壊的変更の種類

この変更は 動作の変更です。

変更理由

この変更により、 DateOnly および TimeOnly 解析メソッドの動作が、無効な引数の例外をスローする .NET の他の TryParse API に合わせて調整されます。 無効な引数の false を暗黙的に返す以前の動作では、プログラミング エラーがマスクされ、デバッグがより困難になる可能性があります。

DateOnly.TryParseDateOnly.TryParseExactTimeOnly.TryParse、およびTimeOnly.TryParseExactの使用状況を確認して、有効なDateTimeStyles値と書式指定子が渡されていることを確認します。 コード パスで無効な引数が可能な場合は、 try-catch ブロックで呼び出しをラップして、 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