Udostępnij za pośrednictwem


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:

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.

Jeśli ta zmiana wpłynie na kod języka F#, określ typ argumentu, aby kompilator wybiera odpowiednie przeciążenie.

Dotyczy interfejsów API