C#无法将类型'string'隐式转换为'bool'错误

时间:2015-07-14 13:01:14

标签: c# string console boolean

我是C#的新手我正在使用微软Visual Studio Express 2013 Windows桌面版本,而我正在尝试进行一个测验,其中我提出问题并且用户必须回答它,这里是代码和错误我明白了 “无法将类型'string'隐式转换为'bool'”,这发生在2 if语句中,我知道bool的值为true或false但是它是一个字符串,为什么它会给我这个错误?任何帮助应该被赞赏。 PS:我只包含了我遇到问题的代码部分,这是主类中唯一的代码

下面是代码:

 Start:
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine("Question 1: Test? type yes or no: ");
        String answer1 = Console.ReadLine();

        if (answer1 = "yes") {
            Console.WriteLine();
            Console.WriteLine("Question 2: Test? type Yes or no");
        }
        else if (answer1 = "no")
        {
            Console.WriteLine();
            Console.WriteLine("Wrong, restarting program");
            goto Start;
        }
        else {
            Console.WriteLine();
            Console.WriteLine("Error");
            goto Start;
        }

4 个答案:

答案 0 :(得分:5)

所有if语句中的

if (answer1 = "yes")

应该是

if (answer1 == "yes")

在c#中,=是分配值,==用于比较。在你所有的if语句中改变它,你会没事的

答案 1 :(得分:2)

请看一下这一行:

if (answer1 = "yes") {

这将分配"是"首先回答1,然后再回答

if(answer1) { // answer1 = "yes"

所以现在这将尝试将answer1(一个字符串)转换为一个布尔值,if语句需要。这不起作用并抛出异常。

你必须做这样的比较:

if(answer1 == "yes") {

或者你可以使用这样的等于:

if("yes".Equals(answer1)) {

然后对其他人做同样的事情。

答案 2 :(得分:1)

直接原因是=分配,而不是像==那样比较值。 所以你可以做到

   if (answer1 == "yes") {
     ...
   }

但是我更喜欢

  if (String.Equals(answer1, "yes", StringComparison.OrdinalIgnoreCase)) {
    ...
  }

如果用户选择"Yes""YES"等作为答案

答案 3 :(得分:1)

this =是C#中的赋值运算符 this ==是C#中的比较运算符

获取C#中的运算符的完整列表,检查this。作为助手,我通常会建议使用goto statements

所有这些都说明你的代码应该是这样的。

Start:
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine("Question 1: Test? type yes or no: ");
        String answer1 = Console.ReadLine();

        if (answer1 == "yes")
        {
            Console.WriteLine();
            Console.WriteLine("Question 2: Test? type Yes or no");
        }
        else if (answer1 == "no")
        {
            Console.WriteLine();
            Console.WriteLine("Wrong, restarting program");
            goto Start;
        }
        else
        {
            Console.WriteLine();
            Console.WriteLine("Error");
            goto Start;
        }