C#如何将变量传递给函数?

时间:2019-07-09 21:50:55

标签: c# lambda func linq-expressions

简单版本

var myVar = some object;

myList.Where(element => myVar != null && element.Name == myVar.Name)

我想写什么

public static (Return Value) Start<T>(this T input, Func<(IDK what goes here)> exp)
{
   var theVar = somehow get the myVar that was passed in;
   if (theVar != null)
   {
       apply exp; <= I can do this part
   }
}

myList.Start((myVar, element) => element.Name == myVar.Name)); 

基本上可以编写表达式,而不必每次都检查是否为空。

3 个答案:

答案 0 :(得分:0)

使用匿名lambda(我认为未经测试)>

myList.Start((myVar, () => element) => element.Name == myVar.Name)); 

答案 1 :(得分:0)

我找到了一种方法,我写了一个BaseExtension类,里面没有很多东西,只是一些属性的持有人

public static BaseExtension<T> Start<T, TValue>(this IQueryable<T> input, TValue value, Func<TValue, Expression<Func<T, bool>>> expression) =>
        new BaseExtension<T>(input, value == null ? null : expression.Invoke(value));

这可以让我写

_context.MyEntities.Start(myVar, value => entity => entity.Id.ToString() == myVar)

并传入myVar允许我在数据库中执行查询之前在后台执行c#逻辑。

一个例子是myVar!= null,或者我可以添加一个自定义函数,该函数将不应用该表达式

答案 2 :(得分:-1)

where方法应为布尔类型,可以使用此

  private static <type> <name>(<type> arg)
        {
            return true;
        }

如果这对您不起作用,请在Visual Studio上的Insiderewhere中编写一些内容,然后按ctrl +。 。

查看摘要实现