我通过反射设置字段数据。我有一个问题,将字符串转换为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不起作用
答案 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
如果不一致,您将需要找到解析方法,确定转换,然后完成转换。