2010-09-14 64 views
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读取性能,只有的Horizo​​ntalAlignment =“拉伸”。比我创建控制的新实体,我不知道,如何设置属性像Horizo​​ntalAlignment,其中值是“拉伸”等。它会导致异常“无效转换从'System.String'到'System.Windows.Horizo​​ntalAlignment'。 “

回答

0

Horizo​​ntalAlignment是一个枚举类型。 System.Enum.Parse允许您将字符串转换为相应的枚举值。

+0

感谢您的回答。但在循环中可能是PropertyInfo prop = type.GetProperty(“Height”);prop.SetValue(nav,“45”,prop.PropertyType),null);在第一种情况下,但在第二种情况下可以有PropertyInfo prop = type.GetProperty(“Horizo​​ntalAlignment”); prop.SetValue(nav,“Stretch”,prop.PropertyType),null);那么我不能轻易将它转换为枚举值。顺便说一句 - 同样的问题是保证金。 – Kosti 2010-09-14 08:54:29

+0

然后,您需要检查目标属性的类型,如果它是枚举,在设置它之前尝试解析它,没有其他更简单的方法可以考虑。 – 2010-09-14 19:02:46

+0

Omg ...感谢您的想法,不错的工作:) – Kosti 2010-09-15 10:45:26