开发者

Loop through all colors?

I'm working on an app in C# (Windows-Phone-7), and I'm trying to do something simple that has me stumped.

I want to cycle through each Color in Colors, and write out the Color name to a file (along with other stuff).

I have the simplest bit of code, which I know will not work, but I wrote to get started:

foreach (Color myColor in Colors)
{
}

Of course, this gives me the following syntax error:

'System.Windows.Media.Colors' is a 'type', but is used like a 'variable'.

Is there a way to do t开发者_StackOverflow中文版his? It seems really simple!


You can use this helper method to get a Dictionary of each Color's name/value pair.

public static Dictionary<string,object> GetStaticPropertyBag(Type t)
    {
        const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

        var map = new Dictionary<string, object>();
        foreach (var prop in t.GetProperties(flags))
        {
            map[prop.Name] = prop.GetValue(null, null);
        }
        return map;
    }

Use is with:

var colors = GetStaticPropertyBag(typeof(Colors));

foreach(KeyValuePair<string, object> colorPair in colors)
{
     Console.WriteLine(colorPair.Key);
     Color color = (Color) colorPair.Value;
}

Credit for the helper method goes to How can I get the name of a C# static class property using reflection?


You can use Reflection to get all of the properties within the Colors type:

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


Well you can do so by using this code.

     List<string> colors = new List<string>();

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜