Nuevas sobrecargas TimeSpan.From*() que toman enteros
Las nuevas sobrecargas TimeSpan.From*()
que aceptan enteros se introdujeron en .NET 9. Este cambio puede provocar ambigüedad para el compilador de F# y producir errores en tiempo de compilación.
Comportamiento anterior
Antes, había una única sobrecarga para cada método TimeSpan.From*()
, es decir:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
Comportamiento nuevo
A partir de .NET 9, se han agregado nuevas sobrecargas que aceptan argumentos enteros. Llamar a un método como TimeSpan.FromMinutes(20)
en el código de F# produce un error en tiempo de compilación:
error FS0041: No se pudo determinar una sobrecarga única para el método 'FromMinutes' en función de la información de tipo antes de este punto de programa. Es posible que se necesite una anotación de tipo. Tipo conocido de argumento: intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan
Versión introducida
.NET 9 Preview 3
Tipo de cambio importante
Este cambio puede afectar a la compatibilidad de orígenes para el código F#.
Motivo del cambio
Las sobrecargas preexistentes aceptaron un argumento Double. Sin embargo, Double es un formato de punto flotante basado en binarios y, por tanto, tiene imprecisión natural que puede introducir errores. Este comportamiento ha provocado confusión del usuario y errores en la superficie de la API. También es una de las formas menos eficaces de representar estos datos. Para generar el comportamiento previsto, se introdujeron nuevas sobrecargas que permiten a los usuarios pasar enteros.
Acción recomendada
Si este cambio afecta al código de F#, especifique el tipo de argumento para que el compilador seleccione la sobrecarga adecuada.