我希望将字符串转换为对象属性值,我将其名称作为字符串.我试着这样做:

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

问题是,当属性类型为可为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);
}

.net相关问答推荐

EFCore.DbSet.Update 方法添加新行而不是更新它

Blazor服务器应用程序需要在页面上点击才能与元素交互

调整小数精度,.net

string.Format 如何处理空值?

为 XML 编码文本数据的最佳方法

C# 的部分类是糟糕的设计吗?

InternalsVisibleTo 属性不起作用

什么是 SUT,它来自哪里?

在安全处理异常时避免首次机会异常消息

Await 运算符只能在 Async 方法中使用

什么版本的 .NET 附带什么版本的 Windows?

我不了解应用程序域

List 和 IEnumerable 的实际区别

什么是 ToString("N0") 格式?

CI服务器的比较?

string.Empty vs null.你用哪一个?

无法加载文件或程序集System.ValueTuple

如何将 Excel 序列日期编号转换为 .NET DateTime?

程序员应该使用 SSIS,如果是,为什么?

多行 C# 插值字符串文字