C# 颜色变换器功能上的堆栈溢出错误
我有两种颜色的“红色”和“鲑鱼”。我需要创建动态面板也面板背景色。这些颜色必须介于两种颜色(红色)之间C# 颜色变换器功能上的堆栈溢出错误,c#,.net,asp.net,algorithm,stack-overflow,C#,.net,Asp.net,Algorithm,Stack Overflow,我有两种颜色的“红色”和“鲑鱼”。我需要创建动态面板也面板背景色。这些颜色必须介于两种颜色(红色)之间 但是我该怎么做呢。上面的代码给了我stackoverflow错误。因为你递归调用BackGroundColorArranger而没有退出条件。这里有一个提示,当你在调试器中遇到堆栈溢出异常时,转到Debug菜单->Windows->call stack,你会立即看到问题。你会得到堆栈溢出,因为e这些调用中的每一个都相互调用(然后调用另一个,依此类推,直到堆栈溢出): 您的代码有效地:
但是我该怎么做呢。上面的代码给了我stackoverflow错误。因为你递归调用BackGroundColorArranger而没有退出条件。这里有一个提示,当你在调试器中遇到堆栈溢出异常时,转到Debug菜单->Windows->call stack,你会立即看到问题。你会得到堆栈溢出,因为e这些调用中的每一个都相互调用(然后调用另一个,依此类推,直到堆栈溢出): 您的代码有效地:
void BackGroundColorArranger(Color, Color)
{
BackGroundColorArrangerBase(int);
}
void BackGroundColorArrangerBase(int)
{
BackGroundColorArranger(Color, Color);
}
当您递归调用同一个函数时,stock overflow错误意味着您的递归永远不会结束 您需要更改参数,以便当方法调用自身时,它最终会找到一个结束。不是C#developer,在我看来,这里有一个简单的无止境递归
这是一个开玩笑的问题,还是这里有什么问题?正如他们所说,您有一个无限递归循环,这就是为什么会出现堆栈溢出 作为快速修复,请从BackGroundColorArrangerBase中删除此行:
BackGroundColorArranger(x, Color.FromArgb(z));
看起来是这样的:
void BackGroundColorArrangerBase(int z)
{
Panel panel = new Panel();
panel.ID = z.ToString(); //this wil generate the same id for the same pair of colors
panel.Width = 150;
panel.Height = 50;
panel.BackColor = Color.FromArgb(z);
this.Controls.Add(panel);
}
这应该会停止递归。除了动态面板创建之外,您还不太清楚需要什么。按原样,代码只会创建一个面板,并且每次调用BackGroundColorArranger时都会创建一个新面板,使用不同的颜色对,因为您使用颜色对作为面板的ID
如果您需要多个面板,请使用不同的颜色对调用BackGroundColorArranger进行有限循环…如果您需要在屏幕上实际查看面板,则需要更改面板。每个面板在ArrangerBase中的位置,因为现在每个面板从原点开始,大小固定。请为您的问题使用适当的标题-摘要不,不要问大师。+1表示将“鲑鱼”称为颜色。+1表示有“堆栈溢出”问题。
void BackGroundColorArrangerBase(int z)
{
Panel panel = new Panel();
panel.ID = z.ToString(); //this wil generate the same id for the same pair of colors
panel.Width = 150;
panel.Height = 50;
panel.BackColor = Color.FromArgb(z);
this.Controls.Add(panel);
}