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
,但上面的代码是动态执行的。
我得到一个包含在对象(此处为 val)中的值(非可为空类型,如 int、float 等),并且我必须通过将其转换为另一种类型(可以或不能为可为空版本)将其保存到另一个对象的)。什么时候
从“System.Int32”到“System.Nullable`1[[System.Int32,
mscorlib,版本=4.0.0.0,文化=中性,
PublicKeyToken=b77a5c561934e089]]'。
An int
,应该可转换/类型转换为nullable int
,这里有什么问题?
你必须使用Nullable.GetUnderlyingType
获取底层类型Nullable
.
这是我用来克服限制的方法ChangeType
for 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)