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

时间:2017-05-06 19:13:07

标签: c# function if-statement return

嗨,我有这个代码,并且一直在说

  

无法将类型'int'隐式转换为'bool'“

每个“月= 1”,“月= 2”等等......有人可以帮忙吗?

public static string NumberToMonth(int month)
{
    if (month = 1)
        return "január";
    if (month = 2)
        return "február";
    if (month = 3)
        return "március";
    if (month = 4)
        return "április";
    if (month = 5)
        return "május";
    if (month = 6)
        return "június";
    if (month = 7)
        return "július";
    if (month = 8)
        return "augusztus";
    if (month = 9)
        return "szeptember";
    if (month = 10)
        return "október";
    if (month = 11)
        return "november";
    if (month = 12)
        return "december";        
    else
        return "";

3 个答案:

答案 0 :(得分:3)

使用==而非=

  1. =assigning operator。在这一行if(month = 1)中,您将1分配到month
  2. ==equality operator,用于检查两个值/对象是否为 相等。
  3. 代码应该是:

    if (month == 1)
            return "január";
    

    当您使用=时:

    • 您将值指定给month,因此现在月份包含值1。
    • 然后month语句评估if
    • if语句基本上为if(1),其中boolean而不是int
    • 没有从intbool的隐式转换以及编译 错误。

    使用内置函数代替编写自己的方法来检索月份名称:请参阅this answer

    string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(8);
    

答案 1 :(得分:2)

您的问题的解决方案已经得到解答。

消息“无法将类型'int'隐式转换为'bool'”的原因是month = 1是一个表达式

  1. 将值1分配给变量month
  2. 返回指定的值(1
  3. 所以编译器看到if (1),这意味着有一个整数值,其中有一个布尔值。所以它抱怨了。

答案 2 :(得分:1)

=是赋值运算符,因此表达式month = 1正在尝试将1的值赋给month。你想要的是==,它是相等运算符。因此,您要将if条件更改为以下格式:

if (month == 1)
{
    return "január";
}

关于错误消息的原因,这是因为您正在执行分配而不是比较。用简单的英语,您可以执行以下操作:

  1. 1已分配给month
  2. if条件现为:if 1 is true
  3. 所以你基本上问了一个无法回答的问题。以编程方式,发生了以下情况:

    1. 您已将1的值分配给month
    2. 然后if条件变为if (1),其中1int,但条件应评估为truefalse (即bool)。
    3. 因此,编译器抱怨,因为它需要bool,但你给它一个int