我对.Net的ChangeType方法感到困惑。我写了一个扩展方法来转换期望类型的对象值(在我的情况下来自数据库)。因此,我没有使用可空类型,这非常好。
到目前为止我这样做了:
public static T ConvertTo<T>(this object value)
{
T returnValue = default(T);
if ((value != null) &&
(value != DBNull.Value))
{
returnValue = (T)Convert.ChangeType(value, typeof(T));
}
return returnValue;
}
如果我打电话:
int test = myObject.ConvertTo<int>();
如果myObject不包含int,则获取int值或0。 因为可以执行以下操作:
int? test = 5;
我认为将int转换为int没有问题。但如果我这样称呼:
int? test = myObject.ConvertTo<int?>();
我得到System.InvalidCastException。从System.Int32到System.Nullable`1
的转换无效在Convert.ChangeType行中抛出异常。
有人知道为什么吗?
答案 0 :(得分:1)
因为eventReactive
是int?
的简写,与Nullable<int>
不同。这些是.Net中的两种不同类型。如果您想将int
转换为int?
,反之亦然,则必须手动执行此操作。
修改强>
定义了从double到int的转换,而从可空类型到正常数字类型的转换不是。