2012-07-31 38 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