方法,返回类型为“”;表达式”;
本文关键字:表达式 返回类型 方法 | 更新日期: 2023-09-27 18:21:17
是否可以创建一个返回lambda表达式的方法?我找不到合适的例子。
当然,以下语法不起作用。这只是想把我的想法形象化一点:
// Executed code
var filteredList = listWithNames.Where(GetLambdaExpression("Adam"));
// method
public Expression GetLambdaExpression(string name)
{
return listElement => listElement.Name == name;
}
您可以创建返回表达式的函数,例如谓词生成器中的一个简单示例:
public static Expression<Func<T, bool>> True<T>() { return param => true; }
或者这个表达式生成器:
static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
{
var map = first.Parameters
.Select((f, i) => new { f, s = second.Parameters[i] })
.ToDictionary(p => p.s, p => p.f);
var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body);
return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
}
在你的例子中,你应该使用Leppie在下面提到的(我已经投了赞成票)
<Func<TypeOflistElement,bool>>
public Expression<Func<TypeOflistElement,bool>> GetLambdaExpression(string name)
{
return listElement => listElement.Name == name;
}
您可以像这样返回Func<bool, T>
类型的
// Executed code
var filteredList = listWithNames.Where(GetLambdaExpression("Adam"));
// method
public Func<bool, ListElementTypeName> GetLambdaExpression(string name)
{
return listElement => listElement.Name == name;
}
但我不明白你到底想用它做什么。
您必须返回Func<>因为IEnumerable期望一个,就像在您的示例中一样:
public Func<String,Bool> (string name){..}
IEnumerable<T>
的Where方法需要Func<T, bool>
方法的委托,因此GetLambdaExpression()
必须返回Func<T, bool>
其中IQueryable<T>
的方法需要Expression<Func<T, bool>>
,所以GetLambdaExpression()
必须返回Expression<Func<T, bool>>
。
通过调用CCD_ 11方法,可以将CCD_。