2014-10-07 71 views
-3

所以,我试图制作一个函数,使某个标签成为颜色列表中的随机颜色。这是现在我的代码:从数组列表中挑选随机颜色

ArrayList colors = new ArrayList(); 
colors.Add(Color.Black); 
Random rColor = new Random(); 
var randomColor = rColor.Next(0, colors.Count); 

colorTextLabel.ForeColor = randomColor; 

,但它只是在代码的最后一行将返回一个错误说“无法隐式转换类型‘诠释’到‘的System.Drawing.Color’”

如何这完成了吗?

+0

哎呀对不起,这是错误的变量...但还是同样的错误。 – ZeroByter 2014-10-07 01:09:37

+1

只是一个小建议 - 如果您要快速选择大量的随机颜色,您需要将Random rColor = new Random();声明移至类级变量,以防止生成非随机值。 – Enigmativity 2014-10-07 01:09:40

+0

为什么使用'ArrayList',它并不经常用于现代编程。一个'清单'会更合适。 – 2014-10-07 01:41:19

回答

3

您需要随机指标在得到该项目,目前您正试图为int分配给颜色:

colorTextLabel.ForeColor = (Color)colors[randomColor]; 

永远别用ArrayList虽然您可以使用generics

+0

这只是带回错误“as运算符必须与引用类型或可为空类型('System.Drawing.Color'是一个不可为空的值类型)” – ZeroByter 2014-10-07 01:15:23

+0

我忘了Color是一个结构。现在修正 – 2014-10-07 01:16:07

0

尝试做这种方式:

var colours = 
    typeof(System.Drawing.Color) 
     .GetProperties() 
     .Where(x => x.PropertyType == typeof(System.Drawing.Color)) 
     .Select(x => x.Name) 
     .ToArray(); 

colorTextLabel.ForeColor = 
    System.Drawing.Color.FromName(colours[rColour.Next(0, colours.Length)]);  
+0

假设我不想要一些颜色,那么除了条件 – naweez 2016-07-28 11:17:44

+0

@naweez - 在'.Select'做一个'.Where(x => x.Name!=“蓝色”)''之前如何放入。 – Enigmativity 2016-07-28 12:42:37

+0

@ Enigmativety的如果颜色超过30,那么它将很难写入在哪里条件。为什么可能是更好的解决方案。 – naweez 2016-07-28 13:45:14