表达式 c# 中的作用域
Scoping in Expressions c#
我正在处理表达式,我有以下表达式
//p=> 5 == p % 5
var p = Expression.Parameter(typeof(int), "p");
var e = Expression.MakeBinary(ExpressionType.Equal,
Expression.Constant(5),
Expression.Modulo(
p,
Expression.Constant(5)
));
var lambda = Expression.Lambda(e, Expression.Parameter(typeof(int), "p"));
var func = lambda.Compile();
我收到当前异常:
An unexpected exception type was thrown
Expected: System.NotImplementedException
but was: System.InvalidOperationException : variable 'p' of type 'System.Int32' referenced from scope '', but it is not defined
现在这是有道理的,但我感到困惑的是,当 Lambda 表达式被编译时,表达式 "compiler" 是否保留对堆栈中所有变量的引用而不是名称?
这意味着可以构建 lambda 表达式
(p,p)=>p % p == 5
每个 p 在哪里不同?
这些信息在运行时如何存储?
是的,使用相同类型和名称创建的两个参数不同。
换行
var lambda = Expression.Lambda(e, Expression.Parameter(typeof(int), "p"));
至
var lambda = Expression.Lambda(e, p);
我正在处理表达式,我有以下表达式
//p=> 5 == p % 5
var p = Expression.Parameter(typeof(int), "p");
var e = Expression.MakeBinary(ExpressionType.Equal,
Expression.Constant(5),
Expression.Modulo(
p,
Expression.Constant(5)
));
var lambda = Expression.Lambda(e, Expression.Parameter(typeof(int), "p"));
var func = lambda.Compile();
我收到当前异常:
An unexpected exception type was thrown
Expected: System.NotImplementedException
but was: System.InvalidOperationException : variable 'p' of type 'System.Int32' referenced from scope '', but it is not defined
现在这是有道理的,但我感到困惑的是,当 Lambda 表达式被编译时,表达式 "compiler" 是否保留对堆栈中所有变量的引用而不是名称?
这意味着可以构建 lambda 表达式
(p,p)=>p % p == 5
每个 p 在哪里不同?
这些信息在运行时如何存储?
是的,使用相同类型和名称创建的两个参数不同。
换行
var lambda = Expression.Lambda(e, Expression.Parameter(typeof(int), "p"));
至
var lambda = Expression.Lambda(e, p);