【发布时间】:2017-05-10 05:50:04
【问题描述】:
我在var okColors = colors.ToArray(); 收到以下错误
无法计算表达式,因为当前线程处于堆栈溢出状态。
你能帮忙吗?
private Color GetRandomColor()
{
Random randomGen = new Random();
Color randomColor = Color.Red;
KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
KnownColor[] badColors = { KnownColor.AliceBlue };
IEnumerable<KnownColor> colors = names.Except(badColors);
var okColors = colors.ToArray();
KnownColor randomColorName = okColors[randomGen.Next(okColors.Length)];
randomColor = Color.FromKnownColor(randomColorName);
if (!ColorsList.Contains(randomColor) && !randomColor.Name.Contains("Light"))
ColorsList.Add(randomColor);
else
GetRandomColor();
return randomColor;
}
【问题讨论】:
-
你能发布你的班级定义吗?
-
我认为您对
GetRandomColor有无限递归,这会导致堆栈溢出。由于您每次调用该方法时都会创建一个新的Random,并且Random是根据当前时间播种的,因此您的代码会一遍又一遍地选择相同的颜色并最终溢出堆栈。 -
除了重复使用
Random的问题之外,如果你生成太多颜色,你总是会遇到无限递归,因为找到的每种颜色都是ColorsList。即使您使用 random 解决问题,也会发生这种情况。 -
“KnownColor”的定义是?并且 '.Contains' 总是给出值数组,确保它不应该为空。
标签: c#