4
我有以下擴展方法,一個用於float,另一個用於double。float和double之間的模糊擴展方法調用
public static string ToTimeString(this float f, TimeStringAccuracy accuracyFlags = DefaultAccuracyFlags, TimeStringSeparator separator = DefaultSeparator)
public static string ToTimeString(this double d, TimeStringAccuracy accuracyFlags = DefaultAccuracyFlags, TimeStringSeparator separator = DefaultSeparator)
當我從Visual Studio單元測試調用函數時,測試運行正常,並且調用沒有模糊。當我從Unity3D代碼中調用float函數(使用Mono)時,這兩個函數之間的調用是不明確的。爲什麼編譯器不知道它應該調用浮動擴展?可能是單聲道造成這種情況?
這是呼叫:
float i = 1f;
i.ToTimeString();
編譯器錯誤:
Assets/Scipts/UIScripts/GameplayUIWindow.cs(61,48): error CS0121: The call is ambiguous between the following methods or properties: ToTimeString(this double, TimeStringAccuracy, TimeStringSeparator)' and `ToTimeString(this float, TimeStringAccuracy, TimeStringSeparator)'
看起來像Mono的問題,無法用Visual Studio/Windows複製問題。 – Habib 2015-01-09 18:50:26
不同的編譯器,不同的錯誤...但方法定義確實有點模棱兩可。最好只提供一個,並且在需要其他數據類型的地方將其轉換爲使用它的代碼。 – LearnCocos2D 2015-01-09 18:54:28
我第二次科科斯的想法,它更有意義。 – FunctionR 2015-01-09 19:55:02