Neue TimeSpan.From*()-Überladungen, die ganze Zahlen annehmen
In .NET 9 wurden neue TimeSpan.From*()
-Überladungen eingeführt, die ganze Zahlen annehmen. Diese Änderung kann zu Mehrdeutigkeit für den F#-Compiler und zu Kompilierzeitfehlern führen.
Vorheriges Verhalten
Zuvor gab es für jede TimeSpan.From*()
-Methode eine einzelne Überladung, nämlich:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
Neues Verhalten
Ab .NET 9 wurden neue Überladungen hinzugefügt, die ganzzahlige Argumente akzeptieren. Das Aufrufen einer Methode wie TimeSpan.FromMinutes(20)
im F#-Code führt zu einem Kompilierzeitfehler:
error FS0041: Eine eindeutige Überladung für die Methode „FromMinutes“ konnte aufgrund von Typinformationen vor diesem Programmpunkt nicht bestimmt werden. Möglicherweise ist eine Typanmerkung erforderlich. Bekannter Argumenttyp: intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan
Eingeführt in Version
.NET 9 Preview 3
Typ des Breaking Changes
Diese Änderung kann sich auf die Quellkompatibilität für F#-Code auswirken.
Grund für die Änderung
Die bereits vorhandenen Überladungen akzeptierten ein Double-Argument. Double ist jedoch ein binärbasiertes Gleitkommaformat und weist somit eine natürliche Ungenauigkeit auf, die Fehler auslösen kann. Dieses Verhalten hat zu Verwirrung bei Benutzern und Fehlern auf der API-Oberfläche geführt. Es ist auch eine der weniger effizienten Möglichkeiten, diese Daten darzustellen. Um das beabsichtigte Verhalten zu erzielen, wurden neue Überladungen eingeführt, mit denen Benutzer ganze Zahlen übergeben können.
Empfohlene Maßnahme
Wenn sich diese Änderung auf Ihren F#-Code auswirkt, geben Sie den Typ des Arguments an, damit der Compiler die entsprechende Überladung auswählt.