C#Convert.ChangeType可以';t将int转换为System.Nullable
我被.Net的ChangeType方法弄糊涂了。我编写了一个扩展方法来转换预期类型的对象值(在我的例子中来自数据库)。只要我不使用可为空的类型,这就相当好了 到目前为止,我正在这样做:C#Convert.ChangeType可以';t将int转换为System.Nullable,c#,C#,我被.Net的ChangeType方法弄糊涂了。我编写了一个扩展方法来转换预期类型的对象值(在我的例子中来自数据库)。只要我不使用可为空的类型,这就相当好了 到目前为止,我正在这样做: public static T ConvertTo<T>(this object value) { T returnValue = default(T); if ((value != null) && (value != DBNull.Value)) {
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?>();
int?test=myObject.ConvertTo();
我正在获取System.InvalidCastException。从System.Int32到System.Nullable`1的强制转换无效
在Convert.ChangeType行中引发异常
有人知道为什么?因为
int?
是Nullable
的缩写,它不同于int
。这是.Net中的两种不同类型。如果要将int?
转换为int
或反之亦然,则必须手动执行
编辑
定义了从double到int的转换,而没有定义从null类型到普通数值类型的转换。问题不在于它们是两种不同的类型。如果您使用
double
执行此操作,尽管double
和int
是不同的类型,但它仍然可以工作。问题是没有定义int
到Nullable
的转换。您是对的,在这种情况下,需要编写代码来进行转换。
int? test = 5;
int? test = myObject.ConvertTo<int?>();