2012-07-31 39 views
0

獲取以下參數運行異常(「Expression must be readableParameter name:right」)運行此代碼並不能找出原因。Expression.Assign Right屬性必須可讀

此代碼旨在創建一個委託來獲取XmlNode中的屬性並將它們映射到對象上的屬性。

private static Action<XmlNode, T> createMapperFunction() { 
      var props = typeof(T).GetProperties().ToArray(); 
      var xmlNodeParameter = Expression.Parameter(typeof(XmlNode), "x"); 
      var resultParameter = Expression.Parameter(typeof(T), "result"); 
     // Expression. 
      var exprList = new List<Expression>(); 
      for (int i = 0 ; i < props.Length ; i++) { 
       if (props[i].PropertyType == typeof(string)) 
        exprList.Add(Expression.Assign(Expression.Property(resultParameter,props[i].Name), 
          Expression.Property(
           Expression.Property(
            Expression.Property(xmlNodeParameter,"Attributes"), "ItemOf", Expression.Constant(props[i].Name)),"InnerText"))); 
      } 
      var body = Expression.Block(exprList); 
      return Expression.Lambda<Action<XmlNode, T>>(body, xmlNodeParameter, resultParameter).Compile(); 



     } 
+0

您能否通過提供*哪一行*引起此異常來幫助我們? – 2012-07-31 15:30:32

+0

這不會傷害你的大表情分成多個表情。使代碼更易於閱讀和調試。 – CodesInChaos 2012-07-31 15:41:45

+0

其表達式。引發異常的分配。 儘快編輯帖子,我有機會並將其分成多行。 – Wegged 2012-07-31 15:46:33

回答

2

XmlAttribute.InnerText是隻寫。使用XmlAttribute.InnerText作爲分配的右側將不起作用,因爲Assign表達式無法讀取值以將其分配給左側。

+0

@CodesInChaos你沒有線索,所以你倒下了答案? 'XmlAttribute.InnerText'是**只寫**,你不能執行像'newValue = xmlAttribute.InnerText'這樣的操作,因爲它沒有getter。 – 2012-07-31 15:45:40

+0

@CodesInChaos錯字,修正。 – 2012-07-31 15:48:24

+0

有趣的你是正確的,它只寫只是有趣的,因爲我有讀取此屬性的工作代碼。 string tableName = n.Attributes [「TableName」]。InnerText; – Wegged 2012-07-31 15:49:56