c#中不能访问bool变量
本文关键字:bool 变量 访问 不能 | 更新日期: 2023-09-27 18:10:08
这部分代码说if (bar = true)
,它找不到我在if (foo == "True")
或if (foo == "False")
中创建的变量"bar"
string foo = Console.ReadLine();
if (foo == "True") {
bool bar = true;
}
if (foo == "False") {
bool bar = false;
}
if (bar = true) {
Console.WriteLine("This is true");
}
else {
Console.WriteLine("This is false");
}
您在每个if
块内声明一个新的bar
,因此它不是该范围之外的有效标识符。您需要在if
块之外声明它,像这样
bool bar = false;
if (foo == "True")
{
bar = true;
}
if (foo == "False")
{
bar = false;
}
if (bar == true)
{
Console.WriteLine("This is true");
}
else
{
Console.WriteLine("This is false");
}
或者,这样也可以:
bool bar = (foo == "True");
if (bar == true)
{
Console.WriteLine("This is true");
}
else
{
Console.WriteLine("This is false");
}
甚至:
Console.WriteLine("This is {0}", foo == "True");
更好的解析方式:
string foo = Console.ReadLine();
bool bar;
if (!bool.TryParse(foo, out bar))
// inform the user, maybe have them try again
Console.WriteLine("This is {0}", bar);
你弄乱了变量的作用域。
bar
只存在于if
语句的作用域中。
在第一个if
语句外声明。
同样,这不是一个比较:if (bar = true)
这是:' if (bar == true)
在两个不同的if语句中创建bar。它们的范围仅限于这些if。当执行离开if时,这两个条都不可见(因此它们不会相互冲突)。试试这样写:
bool bar = false;
if (foo == "True")
{
bar = true;
}
if (foo == "False")
{
bar = false;
}
if (bar == true)
{
Console.WriteLine("This is true");
}
else
{
Console.WriteLine("This is false");
}
或者更好的代码:
bool bar = foo == "True";
Console.WriteLine("This is " + bar);
bar
变量应声明在if
/else
语句的作用域之外
bool bar;
if (foo == "True")
{
bar = true;
}
else
{
bar = false;
}
注。您也可以使用bool.Parse
方法来分配bool值
在这些if的作用域之外声明bar。当声明它们的块关闭时,它们将被遗忘。
两件事:
首先,在每个if
块中定义bar
。它在各自的if
块之外是不可见的。据说它们有一个局部作用域。
第二,您必须使用bar == true
而不是bar = true
。=
为赋值操作符,==
为相等操作符。
下面的命令可以工作:
string foo = Console.ReadLine();
bool bar;
if (foo == "True")
bar = true;
if (foo == "False")
bar = false;
if (bar == true)
Console.WriteLine("This is true");
else
Console.WriteLine("This is false");
Bar是代码中的一个局部变量。需要从if语句块中取出