假设我们有这个类
class ClassA
{
public ClassB[] MyProperty { get; set; }
}
class ClassB
{
public int[] AnotherProperty { get; set; }
}
现在我想为AnotherProperty
的给定实例访问ClassA
的值以及反映两个数组的索引数组{ 3 , 5 }
,例如MyProperty
。表示顶级中的第四个元素(评估为AnotherProperty
)和第二个级别中的第六个元素(Func<ClassA, int[], int>
)。因此,我将通过表达式树创建var instanceArgument = Expression.Parameter(typeof(MyClass), "x");
var indexesArgument = Expression.Parameter(typeof(int[]), "i");
var expr = instanceArgument;
expr = Expression.Property(expr, "MyProperty");
expr = Expression.ArrayIndex(expr, ???);
expr = Expression.Property(expr, "AnotherProperty");
expr = Expression.ArrayIndex(expr, ???);
var f = Expression.Lambda<Func<ClassA, int[], int>>(expr, instanceArgument, indexesArgument);
:
indexesArgument
正如您所看到的,我不确定如何为表达式提供索引。我知道我必须使用反映传递给我们的委托的索引的3
,但是如何访问值5
和u"\N{CHARACTER NAME}
?