C#通过反射对可空类型动态赋值的问题
- 转换成可空类型的基类型
- object o = Convert.ChangeType( e.Value.ToString(), Nullable.GetUnderlyingType( type ) );
- 可以直接设置 值
- recordCopy.GetType().GetProperty( gc.FieldName ).SetValue( recordCopy, o, null );
假如有一个实体ProductInfo
{
pbulic System.Nullable<int> CategoryID{get; set;};
.....
}
当使用反射得到CategoryID的PropertyInfo后
Type type = typeOf(ProductInfo);
PropetryInfo prop = type.GetProperties()[0];
object instance = Activator.CreateInstance(type);
prop.SetValue(instance, ChangeType(value, targetType),null);
ChangeType方法如果是可空泛型,则获取其基本类型,例子中将转换成Int32。但在prop.SetValue的时候会报TargetInvocationException。
显然,这里的Prop是int?,我该怎样把int?的类型通过反射给它赋进去?
0 2012-01-06 13:55:42
你的代码没什么问题,除了pbulic ,PropetryInfo 别字{get; set;};多了分号
建议检查下
ChangeType(value, targetType)
错误应该是这个方法里爆出来的
0 2012-01-06 14:44:40
Activator.CreateInstance(typeof(Nullable<>).MakeGenericType(typeof(int)));