Condividi tramite


I metodi DateOnly e TimeOnly TryParse generano un'eccezione per l'input non valido

I metodi DateOnly e TimeOnlyTryParseTryParseExact ora generano un'eccezione ArgumentException quando vengono forniti valori non validi o specificatori di formato non validi DateTimeStyles. In questo modo il comportamento viene allineato ad altre TryParse API in .NET.

Versione introdotta

.NET 11 Preview 2

Comportamento precedente

In precedenza, passando valori o identificatori di formato non validi DateTimeStyles a DateOnly.TryParse, DateOnly.TryParseExact, TimeOnly.TryParseo TimeOnly.TryParseExact causava la restituzione false dei metodi senza generare un'eccezione.

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

Nuovo comportamento

A partire da .NET 11, il passaggio di valori o identificatori di formato non validi DateTimeStyles a questi metodi genera un'eccezione ArgumentException. L'eccezione include dettagli sull'argomento non valido, ad esempio il nome del parametro.

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

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Questa modifica allinea il comportamento dei metodi di DateOnly e TimeOnly di parsing con altre API di TryParse in .NET, che lanciano eccezioni per argomenti non validi. Il comportamento precedente di restituire in modo silenzioso false per argomenti non validi potrebbe mascherare errori di programmazione e rendere il debug più difficile.

Esaminare l'utilizzo di DateOnly.TryParse, DateOnly.TryParseExactTimeOnly.TryParse, e TimeOnly.TryParseExact per assicurarsi che vengano passati valori e identificatori di formato validiDateTimeStyles. Se nei percorsi di codice sono possibili argomenti non validi, racchiudere le chiamate in un blocco try-catch per gestire 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
}

Le API interessate