C# 使用动态

C# 使用动态,c#,dynamic,type-conversion,C#,Dynamic,Type Conversion,根据源数据类型,我有一些执行数据转换的方法: private static string GetStringValue(String value) { ... } private static string GetStringValue(DateTime value) { ... } private static string GetStringValue(Decimal value) { ... } private static string GetStringValue(Double

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

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时引发异常。我没有为这种类型定义重载,因为我认为它会导致“object”重载,但运行时没有这样做,而是尝试使用“decimal”和“double”重载,这导致了异常

因此,解决方法就是简单地添加

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

它可以是任何类型。主要目的是根据vdo的类型调用正确的方法重载。在转换为字符串时,您确实需要区分double和decimal?是的。。。这似乎有点尴尬,但通常“v”来自实体框架POCO类的属性。根据RDMS(例如SqlServer或Oracle),可以通过两种方式中的任何一种生成属性。这就是为什么我需要一个同时适用于这两者的解决方案。我没有得到这样的异常,代码执行正确。一定还有别的原因…终于找到了原因。看到我的答案了吗