我有以下扩展方法,一个用于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代码调用函数浮动(使用Mono)时,这两者之间的调用是不明确的。为什么编译器不知道它应该调用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)'
答案 0 :(得分:0)
请尝试使用此版本:
public static string ToTimeString<T>(this T target, TimeStringAccuracy accuracyFlags = DefaultAccuracyFlags, TimeStringSeparator separator = DefaultSeparator) where T : struct
它可以编译为Mono中的不同代码,但仍然允许您以您想要的方式使用代码。作为免责声明,我建议对方法体内的类型参数T进行一些类型检查,以保证方法的行为与预期类型(如float和double)的预期方式相同,并抛出异常类型的异常(如int)或者Enum)。