循环遍历所有颜色?

我正在使用C#(Windows-Phone-7)中的一个应用程序,我正在尝试做一些让我难过的简单事情。

我想循环遍历颜色中的每个颜色,并将颜色名称写入文件(以及其他内容)。

我有最简单的代码,我知道这些代码不起作用,但我写信开始:

foreach (Color myColor in Colors) { } 

当然,这给了我以下语法错误:

‘System.Windows.Media.Colors’是’type’,但用作’变量’。

有没有办法做到这一点? 看起来真的很简单!

您可以使用此辅助方法获取每个Color的名称/值对的Dictionary。

 public static Dictionary GetStaticPropertyBag(Type t) { const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; var map = new Dictionary(); foreach (var prop in t.GetProperties(flags)) { map[prop.Name] = prop.GetValue(null, null); } return map; } 

用途是:

 var colors = GetStaticPropertyBag(typeof(Colors)); foreach(KeyValuePair colorPair in colors) { Console.WriteLine(colorPair.Key); Color color = (Color) colorPair.Value; } 

对辅助方法的信用是如何使用reflection获取C#静态类属性的名称?

您可以使用Reflection获取Colors类型中的所有属性:

 var colorProperties = Colors.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public); var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null)); foreach(Color myColor in colors) { // .... 

那么你可以使用这段代码。

  List colors = new List(); foreach (string colorName in Enum.GetNames(typeof(KnownColor))) { //cast the colorName into a KnownColor KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), colorName); //check if the knownColor variable is a System color if (knownColor > KnownColor.Transparent) { //add it to our list colors.Add(colorName); } }