首页 / C# / c#-带有代表参数的lambda语句
c#-带有代表参数的lambda语句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-带有代表参数的lambda语句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2284字,纯文字阅读大概需要4分钟。
内容图文
![c#-带有代表参数的lambda语句](/upload/InfoBanner/zyjiaocheng/683/f2dfaed92b8742798b928862780c4f26.jpg)
基本上我想了解WrapCallback:
private static SendOrPostCallback WrapCallback(SendOrPostCallback sendOrPostCallback)
{
return state =>
{
// do something
};
}
这里使用Statement Lambda和Delegate:
委托void System.Threading.SendOrPostCallback(对象状态)
state是SendOrPostCallback委托的输入参数,也是语句lambda的输入参数.但是,这里实际上返回了什么?再次代表?怎么样?
我还尝试举一个例子来更好地理解它,但是缺少一些部分.仅Hello被写入控制台.
delegate void TestDelegate(string s);
public static void Main()
{
TestDelegate del = new TestDelegate(Notify);
del("Hello");
WrapCallback(del);
}
private static void Notify(string name)
{
Console.WriteLine(name);
}
private static TestDelegate WrapCallback(TestDelegate testDelegate)
{
return s => {
Console.WriteLine("test");
};
}
有人可以向我解释WrapCallback的行为吗?
解决方法:
好吧,让我们考虑一下场景-我们需要在做一些事情之前在控制台中显示“操作已开始”,然后我们要执行一些操作并最终显示:“操作已完成”.
我们可以使用与您的示例中此SendOrPostCallback中使用的逻辑非常接近的逻辑来实现此目的.为了简单起见,我们的业务操作是计算平方的平方.代码是:
static Action<object> WrapOperation(Action<object> action)
{
return new Action<object>(
obj =>
{
Console.Write("Operation is started ");
Thread.Sleep(1500);
action.Invoke(obj);
Thread.Sleep(1500);
Console.Write(" " + "Operation is finished");
});
}
主要是:
Action<object> someBusinessOperation = x => Console.Write((int)x * (int)x);
Action<object> wrappedOperation = WrapOperation(someBusinessOperation);
wrappedOperation(9);
Console.ReadKey();
输出:操作开始81操作完成
那么这是怎么回事?
—在这行代码中,我们创建函数:
Action<object> someBusinessOperation = x => Console.WriteLine((int)x * (int)x);
— WrapOperation方法只接受委托作为参数,然后创建并返回一个新的委托实例.注意,到目前为止,我们还没有调用任何方法,我们只是让WrapOperation包装委托并返回另一个委托.
最后,我们使用该委托并传递参数调用该方法:
wrappedOperation(9);
附言
当我们将9传递给wrappedOperation时,它作为obj参数注入到方法中,并且此方法具有自己的逻辑,但是随后通过委托someBusinessOperation方法进行重用(此x => Console.Write((int)x *(int)x) ),然后将此对象作为x传递给此函数.因此,我们创建一个接受对象但在调用someBusinessOperation之前和之后执行一些额外逻辑的函数,而不仅仅是一个接受对象作为参数的函数.
值得一提的是,当我们在lambda中使用参数操作时,我们使用的是称为closure的东西(从外部作用域捕获变量)
内容总结
以上是互联网集市为您收集整理的c#-带有代表参数的lambda语句全部内容,希望文章能够帮你解决c#-带有代表参数的lambda语句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。