C# 通过反射动态给已知的字段设置值
/// <summary>
/// 通过反射动态给实体某个字段赋值
/// </summary>
/// <param name="obj">实体对象</param>
/// <param name="propertyName">字段名称</param>
/// <param name="value">具体值</param>
/// <exception cref="ArgumentException"></exception>
public static void SetPropertyValue(this object obj, string propertyName, object value)
{
// 获取obj的类型
Type type = obj.GetType();
if (string.IsNullOrEmpty(propertyName))
{
return;
}
// 获取该类型上名为propertyName的属性
PropertyInfo property = type.GetProperty(propertyName);
// 检查属性是否存在且可写
if (property != null && property.CanWrite)
{
// 尝试将值转换为属性的类型(如果需要的话)
value = Convert.ChangeType(value, property.PropertyType);
// 设置属性值
property.SetValue(obj, value, null);
}
else
{
// 属性不存在或不可写,你可以根据需要抛出异常或记录日志
throw new ArgumentException($"Property {propertyName} does not exist or is not writable on object of type {type.Name}.");
}
}
使用
public void SetModelData(string propertyName,string values)
{
ModelA a=new Model();
// 如果没有反射机制,可能就通过一下的方式进行给某个字段设置值
//if(propertyName=="a"){
// a.Name=values;
//}
// 现在可以通过上述的反射方法动态赋值了
a.SetPropertyValue(propertyName,values);
}