繁体   English   中英

具有功能参数的Lambda表达式

[英]Lambda expression with functional parameter

您可以使用功能参数执行lambda表达式吗?

(x = (foo(value)) => ( x != null || x == somethingElse))

编辑: Linq示例(根据Selman22的建议):

这也不起作用:

result = JsonConvert.SerializeObject((from theme in _themes select new { id = theme.Key, available = (x => { x = _association.getInv(theme.Key); return (x == null || x == guid ); }) }).ToArray<object>());

在这里,您要创建一个lambda语句,并尝试为其分配可用属性:

x => { x = _association.getInv(theme.Key); return (x == null || x == guid ); }

您可能会认为这将返回一个值并将其分配给available但不是。Lambda语句只是常规方法的语法糖。 因此它只有在被调用后才会执行。 在这种情况下,您需要创建一个可以将theme.Key作为参数传递的方法,检查getInv的结果并返回结果,然后可以调用函数并将结果分配给可用属性

select new { id = theme.Key, available = MyFunction(theme.Key) }

@ Selman22解释了如何解决您的问题,但我想添加一些有关您尝试在LINQ中使用lamda的困难的信息。 问题在于,lambas确实只是代表的语法糖,并且编译器在看到lambda表达式时无法完全猜测要使用哪个代表。 考虑以下(完全没有意义的)示例:

public class Program
{
    private static void Main(string[] args)
    {
        int[] themes = {1, 2, 3};
        //var a = themes.Select(i => new {f = j => i%2 == 0}); this line gives an error
        var b = themes.Select(i => new {f = new Func<int, bool>(j => i%2 == 0)});
        var c = themes.Select(i => new {f = new MyDelegate(j => i%2 == 0)});
    }

    private delegate bool MyDelegate(int i);
}

带有a变量的行无法编译,因为编译器不知道是否应创建一个具有Func<int, bool>类型或MyDelegate类型或其他委托类型的字段f的匿名类。 其他两行则完全有效。

这个想法是:当您使用带有匿名类型的lambda时要小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM