【问题标题】:Error: "cannot implicitly convert type 'int' to 'bool' "错误:“无法将类型 'int' 隐式转换为 'bool'”
【发布时间】:2017-10-05 02:03:51
【问题描述】:

你好,我有这个代码,它一直在说

不能将类型'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 "";

【问题讨论】:

  • month == 而不是 month = 用于所有表达。
  • 现在我已经意识到 omfg 而我没有意识到这一点。让我感到羞耻:(但谢谢你。
  • 与错误消息和您的问题完全正交,但请注意,.NET 中的全球化系统可以为您提供月份的名称,而无需您在程序中对其进行硬编码。特别是,您的整个方法可以替换为:public static string NumberToMonth(int month) { return CultureInfo.GetCultureInfo("hu").GetMonthName(month); }。另一方面,如果您想要当前区域设置月份名称,以便向用户显示,只需使用 CultureInfo.CurrentUICulture.DateTimeFormat.GetMonthName(month) 代替。
  • 我意识到,在我编写代码之后,但现在我不想更改它,因为如果您知道我的意思,代码已经完成了工作。

标签: c# function if-statement return


【解决方案1】:

使用== 而不是=

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

代码应该是:

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

当你使用= 时:

  • 您将值分配给month,因此现在月份包含值 1。
  • 然后monthif 语句求值。
  • if 语句基本上得到 if(1),它需要 boolean 而不是 int
  • 没有从intbool 的隐式转换,因此编译 错误。

不要编写自己的方法来检索月份名称,而是使用内置的:参见this answer

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

【讨论】:

  • 您还应该提到“赋值表达式”,例如month = 1,也评估分配的值,这就是为什么没有完全不同的编译器这里的消息,表达式的值为 1,它是一个 int,因此是错误消息。老实说,我认为 C# 编译器人员在识别 可能的 潜在问题并给出提示方面本可以做得更好。
  • 正如您的回答所暗示的那样,它不会引发异常。
【解决方案2】:

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

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

  1. 将值 1 赋给变量 month,并且
  2. 返回分配的值 (1)

所以编译器会看到if (1),这意味着有一个整数值,其中需要一个布尔值。所以它抱怨这一点。

【讨论】:

    【解决方案3】:

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

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

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

    1. 1 分配给month
    2. if 条件现在变为:if 1 is true

    所以你基本上是在问一个无法回答的问题。以编程方式,发生的情况如下:

    1. 您将1 的值分配给month
    2. 然后if 条件变为if (1),其中1int,但条件应评估为truefalse(即bool)。

    因此,编译器会抱怨,因为它需要 bool,但您却给了它 int

    【讨论】:

    • 也许可以解释为什么它在分配时说“无法将 int 转换为 bool”。
    • @GillBates 完成。抱歉,我发布答案时电话响了。
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多