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

时间:2015-04-18 13:59:47

标签: c#

rk的赋值语句无法从“if-else”语句访问变量xnbb。我怎样才能看到它?我是否必须使用“返回”创建一些新方法?

var length = Math.Min(xr_arr.Count(), 24);
for (int y = 0; y < 24; y++)
{
    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
    {
        int xnbb = 0;
    }

    var rk = xnbb + 1 * Math.Round(Math.Exp(Math.Log(2) * (24 - y)));
}

3 个答案:

答案 0 :(得分:3)

  

我是否必须使用&#34; return&#34;?

创建一些新方法

不,您只需要在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;
}

有两点需要注意:

  1. 由于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;
    }
    
  2. 请给你变量有意义的名字。您离开时将调试此代码的人将会非常糟糕地尝试了解您的意图。

答案 1 :(得分: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循环内。

答案 2 :(得分:0)

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

因此,为了使您的变量在多个范围内可用,您需要在作为讨论中两个范围的祖先的范围中声明该变量。

在您的情况下,您可以在xnbb语句之前声明if变量,因为在您的情况下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;
}