传递int参数给函数出现CS1503错误,DateTime初始化类型识别异常
问题分析与修复方案
你的代码存在多个编译错误,引发CS1503参数转换错误,并非month被识别为string类型,具体问题及修复如下:
核心错误点
- 局部变量不能加访问修饰符:循环内部的
weekday是局部变量,不能用public修饰,直接移除该关键字 - 类型不匹配:
new DateTime(year, month, day)返回DateTime对象,无法赋值给int类型变量。若要获取星期几,需调用DayOfWeek属性(可选转为int类型) - 未定义变量:
year和days未声明——函数未接收year参数,switch块也未给days赋值 - 语法冗余:
switch块末尾的;多余,需删除
修复后的示例代码
// 补充year参数,DateTime构造必须依赖年份 public static void draw(int year, int month) { int days = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: // 基础闰年判断,可按需优化逻辑 days = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 29 : 28; break; default: throw new ArgumentOutOfRangeException(nameof(month), "月份必须在1-12范围内"); } for (int day = 1; day <= days; day++) { DateTime date = new DateTime(year, month, day); // DayOfWeek是枚举类型,转为int后星期日为0、星期一为1,依此类推 int weekday = (int)date.DayOfWeek; // 此处可添加weekday的后续处理逻辑 } }
错误原因澄清
你看到的CS1503错误,本质是year未定义导致编译器无法匹配正确的DateTime构造函数重载,进而给出混淆的错误提示,并非month被识别为string类型。补充year参数并修复类型匹配问题后,错误即可解决。
内容的提问来源于stack exchange,提问作者Ladislav Čákora
相关产品推荐
相关产品推荐

