You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何获取对象属性名与值并动态添加到指定列表

实现方案

直接用C#反射遍历目标ViewModel的所有公共实例属性,动态生成属性名值对,完全替代手动逐个赋值的写法,后续BookVM新增/删除属性也不需要修改这段赋值逻辑。

修改后可直接运行的代码

public class ParametersList
{
    public string Name { get; set; }
    public dynamic Value { get; set; }
}

public class BookVM
{
    public string AuthorName{ get; set; }
    public string CoverUrl { get; set; }
    public int AuthorIds { get; set; }
}

public List<Book> Addgetallbooks(BookVM BookVM)
{
    List<ParametersList> obj = new List<ParametersList>();
    // 反射获取BookVM的所有公共实例属性
    var properties = typeof(BookVM).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
    foreach (var prop in properties)
    {
        obj.Add(new ParametersList
        {
            Name = prop.Name,
            Value = prop.GetValue(BookVM)
        });
    }
    var getdata = _opr.GetBooks1(obj);
    return getdata;
}

补充说明

  • 这段代码的执行效果和你注释里手动写的赋值逻辑完全一致,属性名取属性本身的定义名,取值是传入的BookVM实例对应属性的实时值
  • 后续BookVM增减属性时,这段逻辑不需要做任何修改,会自动适配新的属性结构
  • 如果需要排除指定属性,只要在循环内加对应判断跳过即可,比如要排除CoverUrl就加if(prop.Name == nameof(BookVM.CoverUrl)) continue;
  • 普通业务场景下这点反射开销完全可以忽略,如果是超高频调用的场景,可以提前把PropertyInfo集合缓存起来进一步优化性能

内容的提问来源于stack exchange,提问作者M. Rizwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:57:23