Nuovi overload TimeSpan.From*() che accettano numeri interi
Sono stati introdotti nuovi TimeSpan.From*()
overload che accettano numeri interi in .NET 9. Questa modifica può causare ambiguità per il compilatore F# e generare errori in fase di compilazione.
Comportamento precedente
In precedenza era presente un singolo overload per ogni TimeSpan.From*()
metodo, ovvero:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
Nuovo comportamento
A partire da .NET 9, sono stati aggiunti nuovi overload che accettano argomenti integer. La chiamata a un metodo come TimeSpan.FromMinutes(20)
nel codice F# genera un errore in fase di compilazione:
error FS0041: non è stato possibile determinare un overload univoco per il metodo 'FromMinutes' in base alle informazioni sul tipo prima di questo punto di programma. Potrebbe essere necessaria un'annotazione di tipo. Tipo noto di argomento: intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan
Versione introdotta
.NET 9 Preview 3
Tipo di modifica che causa un'interruzione
Questa modifica può influire sulla compatibilità dell'origine per il codice F#.
Motivo della modifica
Gli overload preesistenti accettano un Double argomento. Tuttavia, Double è un formato a virgola mobile e basato su binario e quindi presenta un'imprecisione naturale che può introdurre un errore. Questo comportamento ha causato confusione utente e bug nella superficie dell'API. È anche uno dei modi meno efficienti per rappresentare questi dati. Per produrre il comportamento previsto, sono stati introdotti nuovi overload che consentono agli utenti di passare numeri interi.
Azione consigliata
Se questa modifica influisce sul codice F#, specificare il tipo di argomento in modo che il compilatore selezioni l'overload appropriato.