Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 颜色变换器功能上的堆栈溢出错误_C#_.net_Asp.net_Algorithm_Stack Overflow - Fatal编程技术网

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);
        }