Jac*_*cob 4 c# lambda expression-trees clr4.0 c#-4.0
我正在编写评估 .NETExpression树的代码。我正在尝试创建一个 C# 4 测试来练习我对 的处理ExpressionType.Index,但我无法弄清楚如何通过LambdaExpression. 无论我尝试什么,表达式都会以ExpressionType.Callor的形式出现ExpressionType.ArrayIndex。例如:
IList<int> myList = new ObservableCollection<int> { 3, 56, 8 };
Expression<Func<int>> myExpression = () => myList[3];
// myExpression.Body.NodeType == ExpressionType.Call
myList = new int[] { 3, 56, 8 };
myExpression = () => myList[3];
// myExpression.Body.NodeType == ExpressionType.Call
int[] myArray = new int[] { 3, 56, 8 };
myExpression = () => myArray[3];
// myExpression.Body.NodeType == ExpressionType.ArrayIndex
List<int> myNonInterfaceList = new List<int> { 3, 7, 4, 2 };
myExpression = () => myNonInterfaceList[3];
// myExpression.Body.NodeType == ExpressionType.Call
Run Code Online (Sandbox Code Playgroud)
什么是IndexExpression, 可以通过LambdaExpressionC# 4 中的内联创建吗?
AnIndexExpression正是您所期望的(即数组访问或索引器属性)。它是从 DLR 移植过来的众多新表达式类型之一。但是,C# 4.0 编译器使用与其先前版本相同的表达式类型,因此不会IndexExpression在任何地方使用。如果设计者愿意,其他语言也可以这样做。
要创建一个IndexExpression程序,使用静态ArrayAccess(),MakeIndex()或Property()在方法Expression类。