我是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;
}
答案 0 :(得分:5)
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;
}