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

如何在C#类的ToString方法中动态获取所有属性名与值

动态实现包含所有属性的ToString()方法

完全可以在类内部通过反射实现动态获取所有属性名称及其值的ToString()方法,你的代码思路正确,但存在一处小问题需要修正:

在调用prop.GetValue()时,必须传入当前实例对象this,否则会因为缺少目标实例参数抛出异常。

修正后的ToString()方法代码如下:

public override string ToString()
{
    StringBuilder sb = new StringBuilder();
    
    var allProperties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

    foreach (var prop in allProperties)
    {
        // 传入当前实例this获取属性值
        var value = prop.GetValue(this);
        sb.AppendLine($"Sum of {prop.Name} is: {value ?? "null"}");
    }

    return sb.ToString();
}

额外说明

  • 反射会产生少量性能开销,在对性能要求极高的场景下需要权衡,但日常业务场景中完全适用。
  • 如果需要仅包含当前类(排除基类ThirdDegree)的属性,可以在获取属性时添加BindingFlags.DeclaredOnly:
    var allProperties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
    
  • 可以扩展处理null值、格式化数值等场景,比如上面代码中用value ?? "null"处理属性值为null的情况。

内容的提问来源于stack exchange,提问作者Dimitar Kazakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:40:20