Перебрать все цвета? - PullRequest
       6

Перебрать все цвета?

2 голосов
/ 29 января 2011

Я работаю над приложением на C # (Windows-Phone-7) и пытаюсь сделать что-то простое, что поставило меня в тупик.

Я хочу прокрутить каждый Цвет в Цветах,и запишите имя цвета в файл (вместе с другими вещами).

У меня есть простейший фрагмент кода, который, я знаю, не будет работать, но я написал для начала:

foreach (Color myColor in Colors)
{
}

Конечно, это дает мне следующую синтаксическую ошибку:

'System.Windows.Media.Colors' является 'типом', но используется как 'переменная'.

Есть ли способ сделать это?Это кажется действительно простым!

Ответы [ 3 ]

7 голосов
/ 29 января 2011

Вы можете использовать этот вспомогательный метод, чтобы получить словарь каждой пары имя / значение цвета.

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

Использование с:

var colors = GetStaticPropertyBag(typeof(Colors));

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

Кредит для вспомогательного метода идет на Как получить имя свойства статического класса C # с помощью отражения?

6 голосов
/ 29 января 2011

Вы можете использовать Отражение для получения всех свойств в типе Цвета:

var colorProperties = Colors.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public);
var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null));
foreach(Color myColor in colors)
{
    // ....
2 голосов
/ 29 января 2011

Ну, вы можете сделать это с помощью этого кода.

     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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...