C# 表达式.Assign Right属性必须可读

C# 表达式.Assign Right属性必须可读,c#,xml,lambda,expression-trees,C#,Xml,Lambda,Expression Trees,正在运行此代码获取以下参数异常(“表达式必须为readableParameter name:right”),但无法找出原因 此代码旨在创建一个委托,以获取XmlNode中的属性,并将它们映射到对象上的属性 private static Action<XmlNode, T> createMapperFunction() { var props = typeof(T).GetProperties().ToArray(); var xml

正在运行此代码获取以下参数异常(“表达式必须为readableParameter name: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();



        }
private静态操作createMapperFunction(){
var props=typeof(T).GetProperties().ToArray();
var xmlNodeParameter=Expression.Parameter(typeof(XmlNode),“x”);
var resultParameter=Expression.Parameter(类型(T),“结果”);
//表情。
var exprList=新列表();
for(int i=0;i
是只写的。使用
xmldattribute.InnerText
作为赋值的右侧将不起作用,因为
Assign
表达式无法读取值以将其赋值到左侧。

您能否通过提供导致此异常的行来帮助我们?这不会影响将大表达式拆分为多个表达式。使代码更易于阅读和调试。引发异常的是表达式.Assign。我一有机会就编辑这篇文章,并把它分成多行。@codesin混沌你没有线索,所以你就否决了答案
XmlAttribute.InnerText
是只写的,您不能执行像
newValue=XmlAttribute.InnerText
这样的操作,因为它没有getter。有趣的是,您是对的,它是只写的,这很有趣,因为我有读取此属性的工作代码。字符串tableName=n.Attributes[“tableName”].InnerText;再加上只读和写错字,这使得答案相当荒谬。我已经为你修好了只写一个。同时犯两个这样的错误超出了我的纠错能力:P所以我认为否决票是合理的。