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