0
我想通过反射设置对象的属性(水平/垂直),使用字符串类型的值。我使用类似通过使用字符串值反射来设置对齐属性
private void SetPropertiesFromString(object nav, string properties)
{
Regex r = new Regex("`(?<property>[^~]*)~(?<values>[^`]*)");
MatchCollection mc = r.Matches(properties);
Type type = nav.GetType();
for (int i = 0; i < mc.Count; i++)
{
PropertyInfo prop = type.GetProperty(mc[i].Groups["property"].Value);
prop.SetValue(nav, Convert.ChangeType(mc[i].Groups["values"].Value, prop.PropertyType), null);
}
}
(完全相同像this)
我的问题是,我是从XML读取性能,只有的HorizontalAlignment =“拉伸”。比我创建控制的新实体,我不知道,如何设置属性像HorizontalAlignment,其中值是“拉伸”等。它会导致异常“无效转换从'System.String'到'System.Windows.HorizontalAlignment'。 “
感谢您的回答。但在循环中可能是PropertyInfo prop = type.GetProperty(“Height”);prop.SetValue(nav,“45”,prop.PropertyType),null);在第一种情况下,但在第二种情况下可以有PropertyInfo prop = type.GetProperty(“HorizontalAlignment”); prop.SetValue(nav,“Stretch”,prop.PropertyType),null);那么我不能轻易将它转换为枚举值。顺便说一句 - 同样的问题是保证金。 – Kosti 2010-09-14 08:54:29
然后,您需要检查目标属性的类型,如果它是枚举,在设置它之前尝试解析它,没有其他更简单的方法可以考虑。 – 2010-09-14 19:02:46
Omg ...感谢您的想法,不错的工作:) – Kosti 2010-09-15 10:45:26