使用动态调用的十进制和双精度方法之间的不明确调用

本文关键字:调用 方法 之间 不明确 双精度 十进制 动态 | 更新日期: 2023-09-27 17:55:09

我有一些方法可以根据源数据类型执行数据转换:

private static string GetStringValue(String value) { ... }
private static string GetStringValue(DateTime value) { ... }
private static string GetStringValue(Decimal value) { ... }
private static string GetStringValue(Double value) { ... }
private static string GetStringValue(Enum value) { ... }
private static string GetStringValue(Object value) { ... }

从源代码中,我可以使用以下命令调用其中一个方法:

GetStringValue((dynamic)v);

这几乎适用于所有情况,但是在尝试将其与十进制或双精度一起使用时遇到问题......我得到了一个由十进制和双精度变体之间的模糊调用引起的异常。

有什么方法可以解决此问题吗?

使用动态调用的十进制和双精度方法之间的不明确调用

我终于找到了问题所在。当"v"是 Int32 时,异常是引发的。我没有为这种类型的重载定义重载,因为我认为它会下降到"对象"重载,但取而代之的是,运行时尝试使用"十进制"和"双精度"重载,这导致了异常。

所以解决方案是简单地添加

private static string GetStringValue(Int32 value) { ... }