Преобразовать строку в цвет - PullRequest
1 голос
/ 18 февраля 2011

Я устанавливаю данные полей через отражение. И у меня есть проблема, чтобы преобразовать строку в цвет, Convert.ChangeType(stringValue,typeof(Color)) выбрасывает исключение. Как я могу преобразовать в цвет в этой ситуации

        PropertyInfo[] propertis = typeof(TEntity).GetProperties();
        foreach (var attribute in element.Attributes())
        {
            var property = propertis.Where(x => x.Name == attribute.Name).FirstOrDefault();
            if (property != null)
            {
                property.SetValue(someVariable, Convert.ChangeType(attribute.Value,property.PropertyType), null);
            }
        }

P.S. Значение цвета не всегда является именованным цветом, поэтому Color.FromName не работает

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Структура Color имеет атрибут TypeConverter , так что вы можете сделать что-то подобное

var converter=TypeDescriptor.GetConverter(property.PropertyType);
object convertedValue=converter.ConvertTo(attribute.Value, property.PropertyType);
property.SetValue(someVariable, convertedValue, null);

Существует также более полезный (в вашем случае) ConvertFromString метод:

var converter=TypeDescriptor.GetConverter(property.PropertyType);
object convertedValue=converter.ConvertFromString(attribute.Value);
property.SetValue(someVariable, convertedValue, null);

Беглый взгляд на класс в Reflector показывает, что он будет анализировать цвета по имени или по их шестнадцатеричному значению, которое вы ищете: -)

Платформа System.ComponentModel.TypeConverter гораздо более гибкая, чем Преобразование класс

1 голос
/ 18 февраля 2011

Исходя из примечания PS, я не думаю, что вы сможете справиться с этим.Значения должны быть согласованы, если это именованный цвет, который вы можете использовать Color.FromName, если это шестнадцатеричное значение, вы можете использовать Color.FromArgb

Если он не согласован, вам понадобитсячтобы найти способ разбора, определите преобразование, а затем завершите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...