C#Convert.ChangeType无法将int转换为System.Nullable

时间:2015-11-04 11:09:30

标签: c#

我对.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行中抛出异常。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

因为eventReactiveint?的简写,与Nullable<int>不同。这些是.Net中的两种不同类型。如果您想将int转换为int?,反之亦然,则必须手动执行此操作。

修改

定义了从double到int的转换,而从可空类型到正常数字类型的转换不是。