C#新手(原C++开发者):List存储Cigarette对象后如何打印实际数据
解决C#中打印自定义对象显示类名的问题
嘿,刚从C++转C#的话遇到这个问题太正常啦!咱们来一步步搞定它~
为什么会输出类名?
当你调用Console.WriteLine打印自定义对象时,默认会调用这个对象继承自Object类的ToString()方法,而这个方法的默认实现就是返回类的完全限定名(也就是你看到的InventoryManagement.Cigarette),这和C++里默认打印对象地址的逻辑有点类似,但实现方式不同。
两种解决方案,按需选择:
方案1:重写Cigarette类的ToString()方法(推荐)
这是最通用的做法,修改一次后,不管在哪里打印这个对象,都会自动显示你想要的内容。只需要在你的Cigarette类里添加这段代码:
public class Cigarette { public string Title { get; set; } public int MaxInventory { get; set; } // 构造函数 public Cigarette(string title, int maxInventory) { Title = title; MaxInventory = maxInventory; } // 重写ToString方法,自定义输出格式 public override string ToString() { return $"香烟品牌: {Title}, 最大库存: {MaxInventory}"; } }
之后你原来的代码:
marlboro.ForEach(Console.WriteLine);
就能直接输出你期望的内容啦!
方案2:打印时直接指定属性(临时场景适用)
如果不想修改Cigarette类,也可以在打印的时候直接访问对象的属性,手动拼接输出内容:
marlboro.ForEach(cigarette => Console.WriteLine($"香烟品牌: {cigarette.Title}, 最大库存: {cigarette.MaxInventory}") );
这种方式适合临时调试或者只需要在某一处打印的场景。
小提示(C++转C#的小差异)
在C++里我们通常会重载<<运算符来实现对象的打印,而在C#里,重写ToString()是标准做法,它不仅适用于控制台打印,在调试窗口、日志输出等场景也会自动生效哦~
内容的提问来源于stack exchange,提问作者FranticCode
相关产品推荐
相关产品推荐

