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");
}

c#中不能访问bool变量

您在每个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语句块中取出