Freigeben über


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:

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.

Wenn sich diese Änderung auf Ihren F#-Code auswirkt, geben Sie den Typ des Arguments an, damit der Compiler die entsprechende Überladung auswählt.

Betroffene APIs