该变量不存在于当前上下文中

时间:2018-06-01 11:18:58

标签: c# .net

string[,] cusName = { { "John", "Smith" }, { "Will", "James"} , { "Bryan", "Doe" } };

for (int x = 0; x < cusName.GetLength(x); x++)
{
    for (int j = x + 1; j < cusName.GetLength(j); j++)
    {
        Console.Write("{0} ", cusName[x, j]);
    }
    Console.Write("{0} ", cusName[x, j]);
}

我的问题是最后Console.Write总是会产生错误。它表示变量j在当前上下文中不存在。

4 个答案:

答案 0 :(得分:2)

正如其他人已在评论中指出的那样,您无法在声明的循环之外访问j。因此,您必须在循环之前声明j ,或以与重用j不同的方式访问最后一个索引。

话虽如此,目前还不清楚你想对你的代码做什么,而且你可能根本不想在那里拥有Console.Write

你的代码btw存在很大问题:

for (int x = 0; x < cusName.GetLength(x); x++)

只要它小于x,此for循环将递增cusName.GetLength(x)Array.GetLength用于获取多维数组中维度的元素计数。由于您的数组有两个维度,因此您可以对GetLength进行的有效调用对于第一个维度为GetLength(0),对于第二个维度为GetLength(1)。在那里有变量,特别是在循环内递增的变量很可能会破坏。

我认为你原本想做这样的事情:

for (int x = 0; x < cusName.GetLength(0); x++)
{
    for (int j = 0; j < cusName.GetLength(1); j++)
    {
        Console.Write("{0} ", cusName[x, j]);
    }
}

如果你想在循环后继续使用循环变量,你可以在之前声明它:

int j;
for (j = 0; j < cusName.GetLength(1); j++)
{
    …
}
Console.Write(j);

请注意,在循环之后,j具有值cusName.GetLength(1),因为这是循环的工作方式:在每次循环迭代之后,变量将递增,并且循环体将被执行,如果条件(j < cusName.GetLength(1))是真的。所以for循环总是以循环变量的另一个增量结束。

这意味着如果您使用循环变量作为索引,那么循环后该索引将超出数组的范围。因此,如果要重用变量,应该记住这一点。

通常情况下,如果不使用循环变量,而是再次单独计算最后一个索引,则更容易,更清晰:

cusName[x, cusName.GetLength(1) - 1])

答案 1 :(得分:2)

  

如果我想要循环的半全局变量。那我应该用一段时间?我是对的吗?

不完全。所使用的循环类型和变量范围并不像您想象的那样密切相关。

第一个&#34;参数&#34; for循环的意思是用于变量声明和初始化,但实际上你可以(ab)使用它来执行任何有效的语句。 (不要!它不是编写干净和可维护代码的方法)。您甚至可以将其留空并使用您之前在其他地方声明的变量:

var j = 42;
for(; j > 0; --j)
{
    /* do something */
}
/* now, j is still in scope */
Console.WriteLine(j);

强烈建议不要这样做,因为它的可读性低于普通语法,你需要知道一个更加模糊的信息:最后一个循环执行后循环变量的值(它是由中断条件加一个递增/递减) - 这很容易出错并引入一次性错误。

很少有C#初学者知道C#循环语法(与C有许多相似之处)根本不限于for(declaration; condition; increment)模式。如果您想开始混淆的C#代码竞赛,以下是有效且有效的代码:

for (int i = 11, j = new Random().Next(33) + 1; i * j < 65536; Console.WriteLine(++j))
{
    ++i;
}

答案 2 :(得分:1)

for循环中定义变量时,如for(int j=...)中那样,该变量仅存在于循环内。如果要在循环外访问该变量,请在外部声明:

int j;
for(j = ...)

答案 3 :(得分:1)

您应该修改您的代码,如下所示:

    string[,] cusName = { {"John", "Smith"}, {"Will","James"}, { "Bryan", "Doe" } };

    int j=0;

    for(int x = 0; x < cusName.GetLength(x); x++)
    {
        for (j = x + 1; j < cusName.GetLength(j); j++)
        {

            Console.Write("{0} ", cusName[x,j]);

        }
        Console.Write("{0} ", cusName[x, j]);
    }