我有以下通用方法签名
public static T? TryConvertToEnum<T>(object obj, T? defaultValue = null) where T : struct, IConvertible
工作正常!我遇到的问题是VS在这次调用中似乎有一个意想不到的行为:
dynamic dynamicValue = "1";
var value= ConversionHelper.TryConvertToEnum<MyEnum>(dynamicValue);
问题是“价值”的类型是“动态的”,我不知道为什么我会期望它是“MyEnum?”
有没有人预料到这种行为或知道为什么会这样?
答案 0 :(得分:3)
使用类型dynamic
的值执行的所有几乎会产生dynamic
的值。当然,您知道要调用的TryConvertToEnum
方法的返回类型 - 但是您正在传递动态参数,这意味着它在执行时间之前不会被绑定。在执行时,可能存在具有string
参数和不同返回类型的整个其他方法。
有一些非常的表达式案例,其中包含动态值但仍然没有dynamic
的结果类型。在我的头顶,它们是:
is
运营商(总是布尔)as
运算符(始终是名为第二个操作数的类型)在您的情况下,只需使用object
代替dynamic
,呼叫将被静态绑定,而value
将属于MyEnum?
类型。