<分区>
我已经尝试解决这个问题很长时间了(阅读在线博客和文章),但到目前为止没有成功。
什么是委托(delegate)?什么是 Lambda 表达式?两者的优缺点?何时使用其中一个或另一个的最佳实践?
提前致谢。
<分区>
我已经尝试解决这个问题很长时间了(阅读在线博客和文章),但到目前为止没有成功。
什么是委托(delegate)?什么是 Lambda 表达式?两者的优缺点?何时使用其中一个或另一个的最佳实践?
提前致谢。
最佳答案
委托(delegate)是可以用作变量的方法,例如字符串等。例如,您可以声明一个带有一个参数的委托(delegate)方法:
delegate void OneArgumentDelegate(string argument);
它什么都不做,很像一个接口(interface)。如果你在任何类中有一个方法只有一个这样的参数:
void SomeMethod(string someArgument) {}
它匹配委托(delegate)的签名,因此可以分配给它类型的变量:
OneArgumentDelegate ThisIsAVariable = new OneArgumentDelegate(SomeMethod); OneArgumentDelegate ThisIsAlsoAVariable = SomeMethod; // Shorthand works too
然后这些可以作为参数传递给方法并被调用,就像这样:
void Main() { DoStuff(PrintString); } void PrintString(string text) { Console.WriteLine(text); } void DoStuff(OneArgumentDelegate action) { action("Hello!"); }
这将输出 Hello!
。
Lambda 表达式是 DoStuff(PrintString)
的简写形式,因此您不必为要使用的每个委托(delegate)变量都创建一个方法。您“创建”了一个传递给该方法的临时方法。它是这样工作的:
DoStuff(string text => Console.WriteLine(text)); // single line DoStuff(string text => // multi line { Console.WriteLine(text); Console.WriteLine(text); });
Lambda 表达式只是简写,您不妨创建一个单独的方法并将其传递。我希望你现在能更好地理解它 ;-)
关于c# - 了解 Lambda 表达式和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282103/