指定されたDateTimeStyles値が無効または書式指定子が不正な場合、DateOnly、TimeOnlyTryParse、およびTryParseExactメソッドがArgumentExceptionをスローするようになりました。 これにより、.NET の他の TryParse API と動作が調整されます。
導入されたバージョン
.NET 11 Preview 2
以前の動作
以前は、無効な DateTimeStyles 値または書式指定子を DateOnly.TryParse、 DateOnly.TryParseExact、 TimeOnly.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.TryParse、DateOnly.TryParseExact、TimeOnly.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
- System.DateOnly.TryParse(String, DateOnly)
- System.DateOnly.TryParse(String, IFormatProvider, DateTimeStyles, DateOnly)
- System.DateOnly.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateOnly)
- System.DateOnly.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateOnly)
- System.TimeOnly.TryParse(String, TimeOnly)
- System.TimeOnly.TryParse(String, IFormatProvider, DateTimeStyles, TimeOnly)
- System.TimeOnly.TryParseExact(String, String, IFormatProvider, DateTimeStyles, TimeOnly)
- System.TimeOnly.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, TimeOnly)
.NET