这可能是一个相当愚蠢的问题,但我是新来的,不知道是否可以从if语句中取出一个变量,并在if语句之外使用。我想知道,如果你能从if语句中取出一个变量,并在if语句之外使用它,就像我在下面这个例子中展示的那样。
bool ex = true;
if (ex == true)
{
int num = 10;
}
Console.WriteLine(num);
我已经尝试过在if语句之前声明变量,但我给了我一个错误。
你可以在if语句之前声明一个变量,然后你可以在if语句中绑定一个新的值到该变量上,并在if语句之外的任何你需要的函数范围内使用它。
bool ex = true;
int num = 0;
if (ex == true)
{
num = 10;
}
Console.WriteLine(num);
请注意,在if语句中绑定num变量时,我没有再次使用int关键字,因为我们已经在循环外定义了它,否则它会给出一个错误,如-> 在这个作用域中不能声明一个名为'num'的局部变量,因为它会给'num'一个不同的含义。
在if语句的上方写道:"。int num;
"然后在if语句里面写上,"num = 10;
"
当你声明一个变量时,你不需要初始化它。
这个例子教给我们的概念性的东西是关于 局部变量范围.
方法的主体(例如, Main
)的主体由 {
和 }
字符。这表明您的任何变量 申报 只能在这些括号之间写入或读取。我们称之为 "范围"。这适用于大多数情况下的 {
和 }
字符,嵌套在方法中。
所以在你的例子中。
static void Main()
{ // beginning of method scope
bool ex = true;
if (ex == true)
{ // beginning of if statement scope
int num = 10;
} // end of if statement scope
Console.WriteLine(num);
} // end of method scope
有两个作用域: 一个是对方法的作用域... ... Main
方法,并在第一个作用域中设置一个作用域,仅用于在 {
和 }
之后 if
.
ex
被声明为(bool ex
),所以你可以在方法的任何地方使用它,包括在内部作用域中。num
被声明为 (int num
),所以你只能在内部作用域中使用它,而不能在外部作用域中使用。为了解决这个问题,你可以 申报 一个变量,然后再给它赋值。所以,我们的下一个镜头应该是。
static void Main()
{
bool ex = true;
int num; // declare the variable here
if (ex == true)
{
num = 10; // assign the variable here
}
Console.WriteLine(num);
}
这个比较接近了,但是这次我们还是得到一个错误。
CS0165 使用未分配的局部变量 "num
这是因为另一个规则:为了使用一个局部变量,编译器必须能够知道该变量在使用之前一直被分配了一个值。在这种情况下,如果 ex
是 false
? 那么我们将声明 num
但永远不要给它一个值,因为程序不会进入到 if
范围。
解决办法是给 num
值,可以在我们声明它的同时... ...
static void Main()
{
bool ex = true;
int num = 5; // declare and assign the variable here
if (ex == true)
{
num = 10; // re-assign the variable here
}
Console.WriteLine(num);
}
...或者在 else
语句。
static void Main()
{
bool ex = true;
int num; // declare the variable here
if (ex == true)
{
num = 10; // assign the variable here if ex is true
}
else
{
num = 5; // assign the variable here if ex is false
}
Console.WriteLine(num);
}
在第一种情况下: num
只要我们声明它,它就会被赋予一个值,所以即使我们不输入 if
块。num
将有一个值,当我们达到 Console.WriteLine
.
在第二种情况下,编译器知道,当你用链子连接到 if
和 else
一起,该计划要进入的正是。一个 的。因此,如果我们确保两条路径都设置 num
,那么它也将保证在我们达到了 Console.WriteLine
.