如何从C#中的if语句中取出一个变量[关闭]?

问题描述 投票:-3回答:1

这可能是一个相当愚蠢的问题,但我是新来的,不知道是否可以从if语句中取出一个变量,并在if语句之外使用。我想知道,如果你能从if语句中取出一个变量,并在if语句之外使用它,就像我在下面这个例子中展示的那样。

bool ex = true;
if (ex == true)
{
    int num = 10;
}
Console.WriteLine(num);

我已经尝试过在if语句之前声明变量,但我给了我一个错误。

c# visual-studio if-statement variables
1个回答
3
投票

你可以在if语句之前声明一个变量,然后你可以在if语句中绑定一个新的值到该变量上,并在if语句之外的任何你需要的函数范围内使用它。

    bool ex = true;
    int num = 0;
    if (ex == true)
    {
        num = 10;

    }
    Console.WriteLine(num);

请注意,在if语句中绑定num变量时,我没有再次使用int关键字,因为我们已经在循环外定义了它,否则它会给出一个错误,如-> 在这个作用域中不能声明一个名为'num'的局部变量,因为它会给'num'一个不同的含义。


0
投票

在if语句的上方写道:"。int num;"然后在if语句里面写上,"num = 10;"

当你声明一个变量时,你不需要初始化它。


0
投票

这个例子教给我们的概念性的东西是关于 局部变量范围.

方法的主体(例如, 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

这是因为另一个规则:为了使用一个局部变量,编译器必须能够知道该变量在使用之前一直被分配了一个值。在这种情况下,如果 exfalse? 那么我们将声明 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.

在第二种情况下,编译器知道,当你用链子连接到 ifelse 一起,该计划要进入的正是。一个 的。因此,如果我们确保两条路径都设置 num,那么它也将保证在我们达到了 Console.WriteLine.

© www.soinside.com 2019 - 2024. All rights reserved.