gpt4 book ai didi

c# - 如何创建 NodeType 为 ExpressionType.Index 的 .NET 表达式?

转载 作者:行者123 更新时间:2023-11-30 15:47:41 25 4
gpt4 key购买 nike

我正在编写评估 .NET Expression 树的代码。我正在尝试创建一个 C# 4 测试来练习我对 ExpressionType.Index 的处理,但我不知道如何通过 LambdaExpression 创建该类型的表达式>。无论我尝试什么,表达式都会以 ExpressionType.CallExpressionType.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

什么是 IndexExpression,可以通过 C# 4 中的内联 LambdaExpression 创建吗?

最佳答案

IndexExpression正是您所期望的(即数组访问或索引器属性)。它是从 DLR 移植过来的众多新表达式类型之一。然而,C# 4.0 编译器使用与其先前版本相同的表达式类型,因此它不会使用 IndexExpression。任何地方。如果其设计者愿意,其他语言也可以这样做。

创建 IndexExpression以编程方式,使用静态 ArrayAccess() , MakeIndex() , 或 Property() Expression 上的方法类。

关于c# - 如何创建 NodeType 为 ExpressionType.Index 的 .NET 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com