C#Convert.ChangeType可以';t将int转换为System.Nullable

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)) {

我被.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?>();
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?>();