//问题描述 我想写一个递归 是刚刚看了作者的文章 试着写一下 但是调用时 出现了问题 代码如下
People PeopleModels = new People() {
ID="12345",
Name="father",
ParentID="",
Child=new People[1]{
new People(){
ID="12",
Name="erzi12",
ParentID="123456",
Child=null
}
}
};
Func<People, List<People>> ListPeople = null;
Expression<Func<People, List<People>>> ListFuncExp = i => ListPeople(i);
ParameterExpression parameter = Expression.Parameter(typeof(People), "Models");
var DiGui = Expression.Lambda<Func<People, List<People>>>(
Expression.Block(
new ParameterExpression[] { parameter },//var Models;
Expression.Assign(parameter, Expression.Constant(PeopleModels)),//Models=PeopleModels
Expression.IfThenElse(//if
Expression.AndAlso(//Models.ParentID=="" && Models.Child.Length==0
Expression.Equal(
Expression.MakeMemberAccess(parameter, typeof(People).GetProperty("ParentID")),
Expression.Constant("")),
//========================
Expression.Equal(
Expression.ArrayLength(Expression.MakeMemberAccess(parameter, typeof(People).GetProperty("Child"))),
Expression.Constant(0))
),
Expression.Block(//iftrue Console.WriteLine(new List<People>(){Models})
Expression.Call(null, typeof(Console).GetMethod("WriteLine", new[] { typeof(List<People>) }),
Expression.ListInit(
Expression.New(//new List<People>(){}
typeof(List<People>).GetConstructor(new Type[0])),
Expression.ElementInit(typeof(List<People>).GetMethod("Add"),parameter
)
)
)
),
//else
Expression.Invoke(ListFuncExp, parameter)//调用ListFuncExp(parameter)
), Expression.Invoke(ListFuncExp, parameter)
),new ParameterExpression[] { parameter }
);
var resultDiguis = DiGui.Compile();
//问题 这里如果调用resultDiguis(PeopleModels) 会报错 未将对象引用到对象的实例???
Console.WriteLine("结果:{0}", resultDiguis);