如何使用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
相关产品推荐
相关产品推荐

