根据@Iridium 的评论,我最终更改为 Try 模式并返回一个 bool 作为成功标志,而不是抛出 InvalidCastException。看起来很像这样:
if (!property.CanAssignValue(valueToSet))
{
Debug.Write(string.Format("The given value {0} could not be assigned to property {1}.", value, property.Name));
return false;
}
property.SetValue(instance, valueToSet, null);
return true;
“CanAssignValue”变成了三个快速扩展:
public static bool CanAssignValue(this PropertyInfo p, object value)
{
return value == null ? p.IsNullable() : p.PropertyType.IsInstanceOfType(value);
}
public static bool IsNullable(this PropertyInfo p)
{
return p.PropertyType.IsNullable();
}
public static bool IsNullable(this Type t)
{
return !t.IsValueType || Nullable.GetUnderlyingType(t) != null;
}
谢谢!