C# 如何使变量在if-else语句之外可见?

C# 如何使变量在if-else语句之外可见?,c#,C#,rk的赋值语句无法从“if-else”语句访问变量xnbb。如何使其可见?我必须创建一些带有“return”的新方法吗 var length=Math.Min(xr_arr.Count(),24); 对于(int y=0;yMath.Exp(Math.Log(2)*(-y))) { var xn=xr_arr[y]-Math.Exp(Math.Log(2)*(-y)); int xnbb=1; } 其他的 { int xnbb=0; } var rk=xnbb+1*Math.Round(Math

rk
的赋值语句无法从“if-else”语句访问变量
xnbb
。如何使其可见?我必须创建一些带有“return”的新方法吗

var length=Math.Min(xr_arr.Count(),24);
对于(int y=0;y<24;y++)
{
如果(xr_arr[y]>Math.Exp(Math.Log(2)*(-y)))
{
var xn=xr_arr[y]-Math.Exp(Math.Log(2)*(-y));
int xnbb=1;
}
其他的
{
int xnbb=0;
}
var rk=xnbb+1*Math.Round(Math.Exp(Math.Log(2)*(24-y));
}
我必须创建一些带有“return”的新方法吗

不,您只需在
if-else
子句之外声明它:

int xnbb = 0;
if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
{
    var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
    xnbb = 1;
}
else
{
    xnbb = 0;
}
有两点需要注意:

  • 由于
    xnbb
    默认为
    0
    ,您可以完全删除
    else
    子句:

    int xnbb = 0;
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
    {
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
        xnbb = 1;
    }
    
  • 请给你有意义的名字。当您离开时调试此代码的人在试图理解您的意图时会经历一段非常痛苦的时光
  • 我必须创建一些带有“return”的新方法吗

    不,您只需在
    if-else
    子句之外声明它:

    int xnbb = 0;
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
    {
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
        xnbb = 1;
    }
    else
    {
        xnbb = 0;
    }
    
    有两点需要注意:

  • 由于
    xnbb
    默认为
    0
    ,您可以完全删除
    else
    子句:

    int xnbb = 0;
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
    {
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
        xnbb = 1;
    }
    
  • 请给你有意义的名字。当您离开时调试此代码的人在试图理解您的意图时会经历一段非常痛苦的时光

  • 按如下方式重新排列您的行:

                int xnbb;
                if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
                {
                    var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
                    xnbb = 1;
                }
                else
                {
                    xnbb = 0;
                }
                var rk = xnbb + ...
    

    必须在包含此变量所有用法的范围内声明变量
    xnbb
    。在这种情况下,它位于
    for
    循环中。

    按如下方式重新排列行:

                int xnbb;
                if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
                {
                    var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
                    xnbb = 1;
                }
                else
                {
                    xnbb = 0;
                }
                var rk = xnbb + ...
    

    必须在包含此变量所有用法的范围内声明变量
    xnbb
    。在这种情况下,它位于
    for
    循环中。

    在块中声明的变量仅在该块中可用。您可以在上找到有关变量范围的更多详细信息

    所以,为了使变量在多个作用域中可用,您需要在讨论中两个作用域的祖先作用域中声明该变量

    在您的例子中,您可以在
    if
    语句之前声明
    xnbb
    变量,就像在您的例子中,
    for
    范围包括
    if
    一个变量一样,这就是我上面提到的祖先:

    int xnbb = 0;
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
    {
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
        int xnbb = 1;
    }
    else
    {
       xnbb = 0;
    }
    

    块内声明的变量仅在该块内可用。您可以在上找到有关变量范围的更多详细信息

    所以,为了使变量在多个作用域中可用,您需要在讨论中两个作用域的祖先作用域中声明该变量

    在您的例子中,您可以在
    if
    语句之前声明
    xnbb
    变量,就像在您的例子中,
    for
    范围包括
    if
    一个变量一样,这就是我上面提到的祖先:

    int xnbb = 0;
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y)))
    {
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y));
        int xnbb = 1;
    }
    else
    {
       xnbb = 0;
    }