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

如何使用foreach方法遍历并打印C#类实例的所有属性?

解决方案:用foreach打印Item实例的属性

一、简单手动实现(适合新手快速理解)

给你最直观的方案,不用复杂技术,直接访问实例的字段:

首先把实例和它们的名称绑定到字典里(运行时无法直接获取变量名,所以手动存到字典的Key中),然后用foreach遍历字典打印信息:

class Item
{
    public string name;
    public int stock;
    public double priceAU;

    public Item(string aName, int aStock, double aPriceAU)
    {
        name = aName;
        stock = aStock;
        priceAU = aPriceAU;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Item item1 = new Item("64GB USB", 100, 14.95);
        Item item2 = new Item("244Hz Monitor", 50, 395.55);

        // 存储实例名称和对应的实例
        var items = new Dictionary<string, Item>()
        {
            { "item1", item1 },
            { "item2", item2 }
        };

        // 打印表头
        Console.WriteLine("instance | name |  stock | priceAU");

        // foreach遍历字典,输出每个实例的信息
        foreach (var kvp in items)
        {
            Console.WriteLine($"{kvp.Key} | {kvp.Value.name} | {kvp.Value.stock} | {kvp.Value.priceAU}");
        }

        Console.ReadLine();
    }
}

运行后就能得到你想要的输出格式,这个方法逻辑清晰,容易上手。

二、通用反射实现(适合字段/属性较多的场景)

如果以后你的Item类要添加更多字段,不想每次都修改打印代码,可以用C#的反射技术自动获取所有公共字段:

注意需要添加System.Reflection命名空间:

using System.Reflection;

class Item
{
    public string name;
    public int stock;
    public double priceAU;

    public Item(string aName, int aStock, double aPriceAU)
    {
        name = aName;
        stock = aStock;
        priceAU = aPriceAU;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Item item1 = new Item("64GB USB", 100, 14.95);
        Item item2 = new Item("244Hz Monitor", 50, 395.55);

        var items = new Dictionary<string, Item>()
        {
            { "item1", item1 },
            { "item2", item2 }
        };

        // 获取Item类的所有公共实例字段
        var fields = typeof(Item).GetFields(BindingFlags.Public | BindingFlags.Instance);

        // 打印表头:instance + 所有字段名
        Console.Write("instance");
        foreach (var field in fields)
        {
            Console.Write($" | {field.Name}");
        }
        Console.WriteLine();

        // foreach遍历每个实例,输出字段值
        foreach (var kvp in items)
        {
            Console.Write(kvp.Key);
            foreach (var field in fields)
            {
                // 获取当前字段的值
                var fieldValue = field.GetValue(kvp.Value);
                Console.Write($" | {fieldValue}");
            }
            Console.WriteLine();
        }

        Console.ReadLine();
    }
}

小提示

你当前的Item类里定义的是字段(比如public string name;),如果以后改成C#标准的属性(比如public string Name { get; set; }),只需要把代码里的GetFields换成GetProperties,并对应调整获取值的代码为fieldValue = property.GetValue(kvp.Value)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:15:43