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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:22