生成一组特定的随机但唯一的颜色

我想要做的是给我的listView中的每个项目都有一个独特的颜色。 所以我的列表视图中的项目数为’count’

我的方法是调用下面的方法并给出我的项目的方法编号,然后它应该有一个保存第一种颜色的数组,然后当要生成下一种颜色时,它应该与数组之前的颜色进行比较。

问题是我无法弄清楚我将需要什么样的数组的方法,以及如何比较数组中的每个插入颜色与最后插入的颜色。 这是我的代码:

public Color GetUniqueRandomColor(int count){ for(int i = 0; i < count; i++) { Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230)); } return Color.Red;} 

这是一个元素在数组中的样子:

颜色[A = 255,R = 132,G = 148,B = 181]

正如您所看到的,我的方法仍然缺少所需的数组和算法来比较新插入的颜色。 一些帮助和提示将受到关注!

用C#3.5

 public static Color[] GetUniqueRandomColor(int count) { Color[] colors = new Color[count]; HashSet hs = new HashSet(); Random randomColor = new Random(); for(int i = 0; i < count; i++) { Color color; while (!hs.Add(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230)))); colors[i] = color; } return colors; } 

如果你只有C#2.0,你可以用一个字典替换HashSet,其中bool只是你不会使用的占位符,但while表达式会更复杂一些

 public static Color[] GetUniqueRandomColor(int count) { Color[] colors = new Color[count]; Dictionary hs = new Dictionary(); Random randomColor = new Random(); for (int i = 0; i < count; i++) { Color color; while (hs.ContainsKey(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230)))) ; hs.Add(color, true); colors[i] = color; } return colors; } 

我将填充“使用过的颜色”列表,因此每次在调用Color.FromArgb之前生成新颜色,您都可以在列表中进行检查。 如果颜色存在,您将再次调用随机函数,否则生成颜色并将值添加到列表中。