【发布时间】:2015-01-09 18:47:17
【问题描述】:
我有以下扩展方法,一种用于浮点数,一种用于双精度。
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 代码中为浮点调用函数时(使用Mono),这两者之间的调用是模棱两可的。为什么编译器不知道它应该调用浮点扩展?可能是 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 复制该问题。
-
不同的编译器,不同的错误……但方法定义确实有些模棱两可。最好只提供一个,在需要其他数据类型的地方,只需将其转换到使用它的代码中即可。
-
我赞同 Cocos 的想法,比较有道理。
-
@Habib 可能是因为 unity 使用的是旧版本的 mono
-
我想我将删除浮动扩展名并使用该扩展名进行强制转换以在代码中加倍。目前,无论如何转换都是在扩展方法中完成的。该死的,我希望他们最终能更新 Mono :( 我不同意 LearnCocos2D,我认为最好为每种数字类型扩展以实现更清晰的代码。