Type t = typeof(int?); //will get this dynamically
object val = 5; //will get this dynamically
object nVal = Convert.ChangeType(val, t);//getting exception here我在上面的代码中得到了InvalidCastException。对于上面的代码,我可以简单地编写int? nVal = val,但是上面的代码是动态执行的。
我得到一个值(非空类型,如int、float等),它封装在一个对象中(这里是val),我必须将它保存到另一个对象中,方法是将它转换为另一个类型(它可以或者不能是它的可空版本)。什么时候
从“System.Int32”到“System.Nullable`1[System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]的强制转换无效。
int,应该是可转换/类型为nullable int的,这里的问题是什么?
发布于 2013-08-02 11:19:09
您必须使用Nullable.GetUnderlyingType获取底层类型的Nullable。
这是我用来克服ChangeType对Nullable的限制的方法。
public static T ChangeType<T>(object value)
{
var t = typeof(T);
if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return default(T);
}
t = Nullable.GetUnderlyingType(t);
}
return (T)Convert.ChangeType(value, t);
}非一般方法:
public static object ChangeType(object value, Type conversion)
{
var t = conversion;
if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return null;
}
t = Nullable.GetUnderlyingType(t);
}
return Convert.ChangeType(value, t);
}https://stackoverflow.com/questions/18015425
复制相似问题