小编典典

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

all

我想将字符串转换为对象属性值,我将其名称作为字符串。我正在尝试这样做:

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);
}

问题是当属性类型是可为空的类型时,这会失败并引发 Invalid Cast Exception。这不是无法转换值的情况 -
如果我手动执行此操作(例如),它们将起作用(例如DateTime? d = Convert.ToDateTime(value);)我已经看到了一些类似的问题,但仍然无法使其起作用。


阅读 99

收藏
2022-04-08

共1个答案

小编典典

未经测试,但也许这样的事情会起作用:

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);
}
2022-04-08