为何PrintMaanden()仅打印月份名而非指定格式?需复用PrintMaand()
问题分析与修复方案
看起来你想让PrintMaanden()输出"1 => Januari"这种带月份编号的格式,但目前它只输出月份名称对吧?问题出在这两个函数的配合上:
你的PrintMaand()函数现在只是单纯输出Maanden枚举的名称(用Console.WriteLine(maand)),而PrintMaanden()循环调用它时,完全没把循环变量i(也就是月份编号)和名称结合起来,所以自然只会得到单独的月份名。
要解决这个问题,同时复用你已经正常工作的PrintMaand()函数,我推荐两种思路:
思路1:重载PrintMaand()函数(推荐)
这种方式既能保留原函数的独立输出功能,又能新增带编号的输出能力,灵活性更高:
首先保留你原有的PrintMaand()不变:
void PrintMaand(Maanden maand) { Console.WriteLine(maand); }
然后新增一个重载版本,接受月份编号和枚举值,输出组合后的格式:
void PrintMaand(int monthNumber, Maanden maand) { Console.WriteLine($"{monthNumber} => {maand}"); }
最后修改PrintMaanden(),调用这个新的重载函数:
void PrintMaanden() { for (int i = 1; i < 13; i++) { PrintMaand(i, (Maanden)i); } }
思路2:调整输出逻辑,复用原PrintMaand()
如果你不想新增函数,也可以微调原函数的输出方式,然后在循环里补充编号:
先修改PrintMaand(),把WriteLine改成Write(避免自动换行):
void PrintMaand(Maanden maand) { Console.Write(maand); // 不自动换行,方便和编号拼接在同一行 }
然后修改PrintMaanden(),先输出编号和箭头,再调用原函数,最后手动换行:
void PrintMaanden() { for (int i = 1; i < 13; i++) { Console.Write($"{i} => "); PrintMaand((Maanden)i); Console.WriteLine(); // 手动换行,保证每个月份占一行 } }
另外提个小建议:你在代码里用switch语句手动写了12个case来输出对应格式,其实可以利用枚举的数值特性简化这段代码,直接把枚举转成int拿到编号,然后拼接输出:
// 替换整个switch块 Maanden monthNumber = (Maanden)int.Parse(month); Console.WriteLine($"{(int)monthNumber} => {monthNumber}");
这样代码会简洁很多哦~
内容的提问来源于stack exchange,提问作者Leroy de Smet
相关产品推荐
相关产品推荐

