将字符串转换为Color

时间:2011-02-18 15:44:05

标签: c# reflection colors

我通过反射设置字段数据。我有一个问题,将字符串转换为Color, Convert.ChangeType(stringValue,typeof(Color))抛出异常。在这种情况下如何转换为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 个答案:

答案 0 :(得分:4)

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 :(得分:1)

根据PS说明,我认为你无法处理这个问题。值必须一致,如果它是命名颜色,您可以使用Color.FromName,如果它是十六进制值,您可以使用Color.FromArgb

如果不一致,您将需要找到解析方法,确定转换,然后完成转换。