gpt4 book ai didi

c# - 在 Expression> 中评估参数结果

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

评估代表

我有一个表达式,我使用一个参数,我想在下面的 DoSomething 函数中使用它的结果。

public void DoSomething <TModel>(Expression<Func<TModel, String>> func){

}

调用 DoSomething 方法

下面的 TModelNames 属性中有一个名称列表,我想从 DoSomething 方法中访问它。我不知道该怎么做。

DoSomething(m => m.Names);

尝试编译但没有成功

... 
func.Compile().Invoke([need m.Names]) in here.

我的代码在现实中看起来是这样的

public static HelperResult TestFor<TModel>(
ExtendedPageBaseClass<TModel> page,
Expression<Func<TModel, object>> valueField,
Expression<Func<TModel, object>> displayField,
Expression<Func<TModel, ICollection>> list,
Object defaultValue = null, String changedEvent = null)
{
var idField = valueField.GetName();
var label = displayField.GetName();
var display = page.Html.NameFor(displayField).ToString();
var data = list.Compile().Invoke(page.Html.ViewData.Model);
return IsolatedSelectorFor(page, idField, display, label, data);
}

最佳答案

您已经定义了通过m => m.Names 传递给您的方法的表达式。然而,这只是一个函数,它将您的 TModel 作为输入并返回名称列表。请注意,此时您仍然没有传递任何对象。它只是功能的描述。

因此,您需要有一个模型实例才能将其传递给函数并调用它。这样的事情会起作用:

 public static void DoSomething<TModel>(Expression<Func<TModel, List<string>>> selectNamesFunc, TModel model)
{
var f = selectNamesFunc.Compile();
var names = f.Invoke(model);
}

这个方法的用法是:

DoSomething(m => m.Names, modelInstance);

这只是一个示例,说明如何使用、编译和调用表达式。您需要确定类似的东西是否有意义并在您的领域中找到应用程序。

关于c# - 在 Expression<Func<TModel, Object>> 中评估参数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816637/

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