2010-09-14 101 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