Nowe przeciążenia TimeSpan.From*(), które przyjmują liczby całkowite
Nowe TimeSpan.From*()
przeciążenia akceptujące liczby całkowite zostały wprowadzone na platformie .NET 9. Ta zmiana może spowodować niejednoznaczność kompilatora języka F# i spowodować błędy czasu kompilacji.
Poprzednie zachowanie
Wcześniej dla każdej TimeSpan.From*()
metody istniało pojedyncze przeciążenie, a mianowicie:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
Nowe zachowanie
Począwszy od platformy .NET 9, dodano nowe przeciążenia, które akceptują argumenty liczb całkowitych. Wywołanie metody, takiej jak TimeSpan.FromMinutes(20)
w kodzie języka F#, powoduje błąd czasu kompilacji:
błąd FS0041: Nie można określić unikatowego przeciążenia metody "FromMinutes" na podstawie informacji o typie przed tym punktem programu. Może być wymagana adnotacja typu. Znany typ argumentu: intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan(value: float) : TimeSpan
Wprowadzona wersja
.NET 9 (wersja zapoznawcza 3)
Typ zmiany powodującej niezgodność
Ta zmiana może mieć wpływ na zgodność źródła kodu F#.
Przyczyna wprowadzenia zmiany
Istniejące przeciążenia zaakceptowały Double argument. Jednak Double jest formatem zmiennoprzecinkowym opartym na plikach binarnych i dlatego ma naturalną nieprawdopodobną wartość, która może powodować błąd. To zachowanie doprowadziło do nieporozumień użytkownika i usterek na powierzchni interfejsu API. Jest to również jeden z mniej wydajnych sposobów reprezentowania tych danych. Aby utworzyć zamierzone zachowanie, wprowadzono nowe przeciążenia, które umożliwiają użytkownikom przekazywanie liczb całkowitych.
Zalecana akcja
Jeśli ta zmiana wpłynie na kod języka F#, określ typ argumentu, aby kompilator wybiera odpowiednie przeciążenie.