首页 > 解决方案 > 使用迭代显示对象c#中的字段内容

问题描述

我正在学习 C# 的基础知识并探索 foreach 循环的一些用途。我有一个 object address,并试图遍历它以显示对象中各个字段的内容。下面是我在运行代码时得到的输出,然后是预期的输出。

我得到的输出是:

System.String Building
System.String Street
System.String City
System.String Region

预期输出:

C5

London
Camden

这是否可以以类似于下面的代码的方式进行?

    class Address
    {
        public string? Building;
        public string? Street=string.Empty;
        public string? City=string.Empty;
        public string? Region=string.Empty;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Address address=new Address();
            address.Building="C5";
            address.Street=null;
            address.City="London";
            address.Region="Camden";  
            foreach (FieldInfo str in address.GetType().GetFields())
            {
                Console.WriteLine($"{str}");
            }
        }
    }

谢谢,弗兰克

标签: c#

解决方案


FieldInfo.GetValue(对象)

在派生类中重写时,返回给定对象支持的字段的值。

foreach (var info in address.GetType().GetFields())
   Console.WriteLine($"{info.GetValue(address) ?? "Null"}");

输出

C5
Null // Added the null because... well ¯\_(ツ)_/¯
London
Camden

笔记

  • 在执行这种类型的反射时,您应该熟悉一些绑定标志。
  • 为了避免下一个问题,还有Type.GetProperties
  • 只有在没有其他方法的情况下才应该使用反射,10 次中有 9 次可以在不需要调用反射方法的情况下解决问题,这在热路径、代码维护、链接和树抖动预构建优化中变得尤为重要

推荐阅读