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

}

以上是 Convert.ChangeType()在可空类型上失败 的全部内容, 来源链接: utcz.com/qa/419273.html

回到顶部