因为每件事都有限制,我想知道嵌套的for
循环的数量是否有限制,或者只要我有内存,我就可以添加它们,Visual Studio编译器可以创建这样的程序吗?
当然,64个或更多的嵌套for
循环不便于调试,但是可行吗?
private void TestForLoop()
{
for (int a = 0; a < 4; a++)
{
for (int b = 0; b < 56; b++)
{
for (int c = 0; c < 196; c++)
{
//etc....
}
}
}
}
发布于 2016-12-27 22:32:17
在C#语言规范或CLR中没有硬性限制。您的代码将是迭代的,而不是递归的,这可能会导致堆栈溢出非常快。
有一些东西可以算作阈值,例如(通常)您将使用的int
计数器,它将在内存中为每个循环分配一个int
(并且在您使用int分配整个堆栈之前...)。请注意,该int
的使用是必需的,您可以重用相同的变量。
作为pointed out by Marco,当前阈值在编译器中比在实际语言规范或运行时中更多。一旦进行了重新编码,您可能会进行更多的迭代。默认情况下使用旧编译器的If you for example use Ideone,可以轻松获得1200多个for
循环。
然而,那么多for循环是一个糟糕设计的指示器。我希望这个问题纯粹是假设的。
发布于 2016-12-28 04:03:36
所有编译为MSIL的C#都有一个限制。MSIL只能支持65535个局部变量。如果您的for
循环与示例中显示的循环类似,则每个循环都需要一个变量。
您的编译器可能会分配堆上的对象作为局部变量的存储,从而绕过这一限制。然而,我不确定这会产生什么样的奇怪结果。可能会出现与反思有关的问题,这使得这种方法是非法的。
https://stackoverflow.com/questions/41347019
复制相似问题