2017-05-06 62 views
-1

您好我有这样的代码,它是一直说错误:“不能隐式转换类型‘诠释’到‘布尔’”

cannot implicitly convert type 'int' to '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 ""; 
+4

'month =='而不是'month ='您的所有表达式。 –

+0

现在我已经意识到omfg,我没有意识到这一点。耻辱对我:(但是,谢谢你 –

+2

完全正交于错误信息和你的问题,但要注意,.NET中的全球化系统可以给你几个月的名字,而不用在程序中对它们进行硬编码,特别是,你的整个系统方法可以用下面的代码替换:'public static String NumberToMonth(int month){return CultureInfo.GetCultureInfo(“hu”)。GetMonthName(month);}'。另一方面,如果想要当前的区域设置月份名称,为了向用户显示,只需使用'CultureInfo.CurrentUICulture.DateTimeFormat.GetMonthName(month)'代替 –

回答

3

使用==,而不是=

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

代码应该是:

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

downvoter请解释 –

+0

你还应该提到一个“赋值表达式”,比如'month = 1',也*评估为*赋值,这就是为什么这里没有完全不同的编译器消息,表达式的值为1,这是一个int,因此是错误消息。说实话,我认为C#编译器人员可以在这里找出*可能*潜在的问题并给出提示。 –

+0

尽管如此,它并没有抛出异常,正如你的回答所暗示的那样。 –

1

=是赋值运算符,所以表达month = 1试图指定的值1month。你想要的是==,这是等于运算符。所以,你会改变你的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

+0

也许可以解释为什么它说“分配时不能将int **转换为bool”。 –

+0

@GillBates完成。对不起,电话响了,我发布了答案。 –

2

已解决您的问题。

其原因消息“不能隐式转换类型‘诠释’到‘布尔’”是month = 1

  1. 分配值1到可变month的表达式,
  2. 返回指定值(1

所以编译器看到if (1),这意味着存在这样的情况的布尔值,预期的整数值。所以它抱怨。

相关问题