c# – Convert.ChangeType()在可空类型上失败

我想将一个字符串转换为一个对象属性值,其名称我有一个字符串。我想这样做:

string modelProperty = "Some Property Name";
string value = "SomeValue";
var property = entity.GetType().GetProperty(modelProperty);
if (property != null) {
    property.SetValue(entity, 
        Convert.ChangeType(value, property.PropertyType), null);
}

问题是,当属性类型是可空类型时,这是失败并抛出无效转换异常。这不是不能被转换的值的情况下 – 如果我这样做手动(例如DateTime?d = Convert.ToDateTime(value);)我已经看到一些类似的问题,但仍然无法得到它的工作上班。

未经测试,但也许这样的工作:

string modelProperty = "Some Property Name";
string value = "Some Value";

var property = entity.GetType().GetProperty(modelProperty);
if (property != null)
{
    Type t = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;

    object safeValue = (value == null) ? null : Convert.ChangeType(value, t);

    property.SetValue(entity, safeValue, null);
}
http://stackoverflow.com/questions/3531318/convert-changetype-fails-on-nullable-types

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – Convert.ChangeType()在可空类型上失败