错误“无法将类型'int'隐式转换为'string'”

时间:2010-03-06 05:15:45

标签: c#

我正在使用这个简单的代码段来使用日期编号生成月份名称,但我收到了错误Cannot implicitly convert type 'int' to 'string'。我不是想把MonthName改成int!

class Module04
{
    public static void Exercise01()
    {
        Console.WriteLine("Please Enter a day number between 1 and 365: ");
        string line = Console.ReadLine();
        int dayNum = int.Parse(line);

        int monthNum = 0;

        if (dayNum <= 31) // January
        {
            goto End;
        }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 28) // February
        {
            goto End;
        }
        else
        {
            dayNum -= 28;
            monthNum++;
        }

        if (dayNum <= 31) // March
        {
            goto End;
        }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 30) // April
        { goto End; }
        else
        {
            dayNum -= 30;
            monthNum++;
        }

        if (dayNum <= 31) // May
        { goto End; }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 30) // June
        { goto End; }
        else
        {
            dayNum -= 30;
            monthNum++;
        }

        if (dayNum <= 31) // July
        { goto End; }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 31) // August
        { goto End; }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 30) // September
        { goto End; }
        else
        {
            dayNum -= 30;
            monthNum++;
        }

        if (dayNum <= 31) // October
        { goto End; }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

        if (dayNum <= 30) // November
        { goto End; }
        else
        {
            dayNum -= 30;
            monthNum++;
        }

        if (dayNum <= 31) // December
        { goto End; }
        else
        {
            dayNum -= 31;
            monthNum++;
        }

    End:

        string monthName;

        switch (monthName)
        {
            case 0:
                monthName = "January"; break;
            case 1:
                monthName = "February"; break;
            case 2:
                monthName = "March"; break;
            case 3:
                monthName = "April"; break;
            case 4:
                monthName = "May"; break;
            case 5:
                monthName = "June"; break;
            case 6:
                monthName = "July"; break;
            case 7:
                monthName = "August"; break;
            case 8:
                monthName = "September"; break;
            case 9:
                monthName = "October"; break;
            case 10:
                monthName = "November"; break;
            case 11:
                monthName = "December"; break;
            default:
                monthName = "Not yet Done"; break;
        }
        Console.WriteLine("{0} {1}", dayNum, monthName);
    }
}

4 个答案:

答案 0 :(得分:2)

这是switch,你将它用作int - 你可能想把monthNum传递给switch语句。

(另外:你不应该在第一部分的所有monthNum == ...中都有if吗?)

答案 1 :(得分:1)

将开关更改为

switch (monthNum)

答案 2 :(得分:0)

您正在使用int情况切换monthName,因此c#try将字符串转换为int以匹配案例。

http://msdn.microsoft.com/en-us/library/06tc147t(VS.80).aspx

答案 3 :(得分:0)

monthName是一个字符串,因此你的switch case也应该是一个字符串。

string monthName;

            switch (monthName)
            {
                case "0" :
                    monthName = "January"; break;
                case "1" :
                    monthName = "February"; break;
                case "2" :
                    monthName = "March"; break;
                case "3" :
                    monthName = "April"; break;
                case "4" :
                    monthName = "May"; break;
                case "5" :
                    monthName = "June"; break;
                case "6" :
                    monthName = "July"; break;
                case "7" :
                    monthName = "August"; break;
                case "8" :
                    monthName = "September"; break;
                case "9" :
                    monthName = "October"; break;
                case "10" :
                    monthName = "November"; break;
                case "11" :
                    monthName = "December"; break;
                default :
                    monthName = "Not yet Done"; break;
            }
        Console.WriteLine("{0} {1}", dayNum, monthName);
    }