Novas sobrecargas TimeSpan.From*() que utilizam números inteiros
Novas TimeSpan.From*()
sobrecargas que aceitam inteiros foram introduzidas no .NET 9. Essa alteração pode causar ambiguidade para o compilador F# e resultar em erros em tempo de compilação.
Comportamento anterior
Anteriormente, havia uma única sobrecarga para cada TimeSpan.From*()
método, a saber:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
Novo comportamento
A partir do .NET 9, novas sobrecargas foram adicionadas que aceitam argumentos inteiros. Chamar um método como TimeSpan.FromMinutes(20)
no código F# resulta em um erro em tempo de compilação:
erro FS0041: Uma sobrecarga exclusiva para o método 'FromMinutes' não pôde ser determinada com base nas informações de tipo anteriores a este ponto do programa. Pode ser necessária uma anotação de tipo. Tipo conhecido de argumento: intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan
Versão introduzida
.NET 9 Visualização 3
Tipo de mudança de rutura
Essa alteração pode afetar a compatibilidade de origem para o código F#.
Razão para a alteração
As sobrecargas pré-existentes aceitaram um Double argumento. No entanto, Double é um formato binário, de ponto flutuante e, portanto, tem imprecisão natural que pode introduzir erro. Esse comportamento levou a confusão do usuário e bugs na superfície da API. É também uma das formas menos eficientes de representar esses dados. Para produzir o comportamento pretendido, novas sobrecargas foram introduzidas que permitem que os usuários passem inteiros.
Ação recomendada
Se essa alteração afetar seu código F#, especifique o tipo de argumento para que o compilador selecione a sobrecarga apropriada.