採用整數的新 TimeSpan.From*() 多載
在 .NET 9 中,引進了接受整數的新 TimeSpan.From*()
多載。 這項變更可能會對 F# 編譯器產生歧義,導致編譯時出錯。
先前的行為
之前,每個 TimeSpan.From*()
方法只有單一多載,例如:
- FromDays(Double)
- FromHours(Double)
- FromMicroseconds(Double)
- FromMilliseconds(Double)
- FromMinutes(Double)
- FromSeconds(Double)
新的行為
從 .NET 9 開始,新增了接受整數引數的新多載。 在 F# 程式碼中呼叫 TimeSpan.FromMinutes(20)
之類的方法會導致編譯時出錯:
錯誤 FS0041:無法根據此程式點之前的型別資訊來確定方法 'FromMinutes' 的唯一多載。 可能需要型別註釋。 已知的引數型別:intCandidates: - TimeSpan.FromMinutes(minutes: int64) : TimeSpan - TimeSpan.FromMinutes(minutes: int64, ?seconds: int64, ?milliseconds: int64, ?microseconds: int64) : TimeSpan - TimeSpan.FromMinutes(value: float) : TimeSpan
導入的版本
.NET 9 Preview 3
中斷性變更的類型
此變更可能會影響 F# 程式碼的原始碼相容性。
變更原因
先前已存在的多載接受的是 Double 引數。 然而,Double 是一種二進位的浮點格式,因此具有天然的不精確性,可能會造成錯誤。 這種行為造成使用者困惑和 API 介面錯誤。 以其來表示此資料也是效率較低的方法之一。 為了實現預期的行為,引進了新的多載,讓使用者能夠傳入整數。
建議的動作
如果這項變更會影響您的 F# 程式碼,可以指定引數型別來讓編譯器選擇適當的多載。