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

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

 //尝试转换类型
//第一个参数值,第二个参数为类型(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);
}

 

上一篇:如何将C#nullable int转换为int


下一篇:IIS7下swfupload上传大文件出现404错误