c#通过反射设置可空类型值

3 篇文章 0 订阅

在我使用反射设置可空类型(例如:类型?)的时候发现一个坑,这把我坑了一上午,平时用非可空类型倒是没发现这问题。

 //尝试转换类型
//第一个参数值,第二个参数为类型(type的类型)
var changeValue = Convert.ChangeType(propertiesDic[j.Name].GetValue(obj), j.PropertyType);

以上转换后就可以丢入PropertyInfo对应的类型

但是在PropertyInfo是可空类型时就需要:1、先判断是否为可空泛型

2、安全起见类型字符串在等于Nullable

3、然后在通过Nullable.GetUnderlyingType(可空的type类型)获得可空的类型

4、在用Convert.ChangeType(0, propType);进行转换得到对应类型的值

//判断是否为可空泛型
if (types.GetProperty(name).PropertyType.IsGenericType && types.GetProperty(name)
                .PropertyType.GetGenericTypeDefinition().FullName.Contains(typeof(Nullable).ToString()))
{
     var propType = Nullable.GetUnderlyingType(types.GetProperty(name).PropertyType);
     var changeType = Convert.ChangeType(0, propType);
     types.GetProperty(name).SetValue(source, changeType);
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值