gpt4 book ai didi

c# - Lambda 编译抛出 "variable ' ' of type '' referenced from scope '' , but it is not defined"

转载 作者:行者123 更新时间:2023-11-30 19:28:13 26 4
gpt4 key购买 nike

当我尝试编译如下所示的 lambda 时,它抛出:

'System.Collections.Generic.IEnumerable`1[WheelEndCatalogKendo.Models.SapBasicData]' 类型的变量'model' 从范围 '' 引用,但未定义

public static GridBoundColumnBuilder<TModel> BuildColumnString<TModel>(this GridBoundColumnBuilder<TModel> column, WebViewPage<IEnumerable<TModel>> webViewPage, int width) where TModel : class {
var modelParameter = Expression.Parameter(typeof(IEnumerable<TModel>), "model");
Expression<Func<IEnumerable<TModel>, TModel>> firstItem = (model) => model.FirstOrDefault();
var member = MemberExpression.Property(firstItem.Body, column.Column.Member);
var lambda = Expression.Lambda<Func<IEnumerable<TModel>, string>>(member, modelParameter);
var title = webViewPage.Html.DisplayNameFor(lambda).ToHtmlString();
var header = webViewPage.Html.ShortLabelFor(lambda).ToHtmlString().FixUpNewLinesAsHtml();
var compiled = lambda.Compile(); //Throws here with "variable '...' of type '...' referenced from scope '', but it is not defined"
....
}

我看到几个类似的帖子;但到目前为止,他们还没有让我知道我的代码存在问题。好像我提供了 lambda 变量(作为第二个参数参数)。然而,我几乎没有创作表达式树的经验。

有什么想法吗?

最佳答案

问题是 firstItem 表达式中的 model 参数与 modelParameter 不同。在表达式树中,参数不是按名称进行比较,而是按引用进行比较。

这意味着最简单的解决方案是重用 firstItem 中的 model 参数,而不是创建您自己的参数:

var modelParameter = firstItem.Parameters.Single();

通过此修改,您的代码将正常工作。

关于c# - Lambda 编译抛出 "variable ' ' of type '' referenced from scope '' , but it is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342842/

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