C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了没有变量/参数声明的C#lambda表达式?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用lambda表达式作为参数(如 Enumerable.Where)的方法调用而不在表达式中实际声明变量或方法参数时,会调用什么?

例如,我熟悉这个lambda表达式语法:

public String GetDigits(String input)
{
    return new String(input.Where(i => Char.IsDigit(i)).ToArray());
}

不过,我对find out感到惊讶,这也可以写成:

public String GetDigits(String input)
{
    return new String(input.Where(Char.IsDigit).ToArray());
}

在第二个片段中发生了什么,Char.IsDigit()方法(显然)被调用一个隐式参数?这是什么语法?

解决方法

方法不接受lambdas作为参数.他们接受委托作为参数. lambda只是创建委托的一种方式.

另一种方法是提供一个方法组,就像在第二个例子中所做的那样,它可以转换成一个委托.

类似的方法是使用匿名方法功能.这些或多或少被替换为羊羔,当他们加入,所以你看不到太多.您使用该语法的示例将是:

Func<char,bool> preDicate = delegate(char C) { return Char.IsDigit(c); };

另一种方法是使用Delegate.CreateDelegate创建一个委托. (这不是你经常看到的东西.)

最后一个方法是从其他地方获得一个委托变量. (其他地方将使用其他选项之一创建代表.)

@H_502_26@

what’s going on in that second snippet,where the Char.IsDigit() method is (Apparently) being called with an implicit parameter? what is this Syntax called?

它没有被叫.这就是全部.我们正在尝试创建一个委托.委托是一个跟踪要调用方法的对象,以及应该调用的对象.然后,您可以调用委托,它将调用用于创建它的方法.所以在这里你不是调用IsDigit,你正在创建一个指向IsDigit方法的委托,每当调用该委托时,它将调用它.

您使用lambda时,您将创建一个方法,可能在一个新类中(两者都不具有可以引用的名称,但是在运行时它们将有一个),并且该匿名方法的正文将调用IsDigit .然后,lambda解析为指向该匿名方法的代理,该方法维护另一个示例的语义,该方法具有一种方法,当被调用时,调用一个匿名方法,该方法在其实现中调用IsDigit.它增加一个额外的间接层(可能也可能不会在运行时被优化)来完成同样的事情.

大佬总结

以上是大佬教程为你收集整理的没有变量/参数声明的C#lambda表达式?全部内容,希望文章能够帮你解决没有变量/参数声明的C#lambda表达式?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。