C#语法求解释

qq_30412191 2020-07-23 09:42:55
,
怎么解释这个context,有点看不懂
如果换成C#类似于这样的 public static RequestDelegate FooMiddleware(RequestDelegate next){}该怎么写求个大神指教一下,
最好详细一点
...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
八爻老骥 2020-07-23
  • 打赏
  • 举报
回复
就是说,代理就是对函数的引用,最后只要返回Lamda的函数定义就行了,也就是根据返回的内容自动生成一个代理对象,new RequestDelegate ();这个动作由编译器给你做了。
qq_30412191 2020-07-23
  • 打赏
  • 举报
回复
引用 5 楼 icoolno1 的回复:
[quote=引用 2 楼 icoolno1 的回复:]其实就这意思。 public static RequestDelegate AAAMiddleware(RequestDelegate next){ RequestDelegate d=new RequestDelegate (Fun); return d; } Task Fun(HttpContext context){ context.Response.WriteAsync("Foo=>"); }
一步一步给你简化一下,本来是这个样子,写成Lamda之后,Fun函数定义可以写成匿名的:

 public static RequestDelegate AAAMiddleware(RequestDelegate next){
return new RequestDelegate (context=>{context.Response.WriteAsync("Foo=>");});
}
然后,AAAMiddleware只有一行返回,可以把{}去掉,同样匿名函数也只有一行返回,也可以去掉{},再进一步简化就是这样了:

 public static RequestDelegate AAAMiddleware(RequestDelegate next)
=> context=>context.Response.WriteAsync("Foo=>");

[/quote] ///这一步还好我能直接看懂,没啥问题,就是下面这一个 public static RequestDelegate AAAMiddleware(RequestDelegate next){ return new RequestDelegate (context=>{context.Response.WriteAsync("Foo=>");}); } //这一步就有点懵了 public static RequestDelegate AAAMiddleware(RequestDelegate next) => context=>context.Response.WriteAsync("Foo=>");
八爻老骥 2020-07-23
  • 打赏
  • 举报
回复
引用 2 楼 icoolno1 的回复:
其实就这意思。
public static RequestDelegate AAAMiddleware(RequestDelegate next){
RequestDelegate d=new RequestDelegate (Fun);

return d;
}

Task Fun(HttpContext context){
context.Response.WriteAsync("Foo=>");
}


一步一步给你简化一下,本来是这个样子,写成Lamda之后,Fun函数定义可以写成匿名的:

public static RequestDelegate AAAMiddleware(RequestDelegate next){
return new RequestDelegate (context=>{context.Response.WriteAsync("Foo=>");});
}

然后,AAAMiddleware只有一行返回,可以把{}去掉,同样匿名函数也只有一行返回,也可以去掉{},再进一步简化就是这样了:


public static RequestDelegate AAAMiddleware(RequestDelegate next)
=> context=>context.Response.WriteAsync("Foo=>");

qq_30412191 2020-07-23
  • 打赏
  • 举报
回复
引用 3 楼 github_36000833 的回复:
首先=>可以用来定义表达式主体,举例就是 public override string ToString() { return "hello world"; } 可以写成: public override string ToString() => "hello world"; 理解了这点,就可以理解 public static Task BazTaskRoutine(HttContext context) { return context.Response.WriteAsync("Baz"); } 等同于: public static Task ReturnBaz(HttContext context) => context.Response.WriteAsync("Baz"); 而Task BazTaskRoutine(HttContext context)满足于delegate Task RequestDelegate(HttContext context)的定义, 因此,要返回一个RequestDelegate,可以返回一个BazTaskRoutine。 public static RequestDelegate BazMiddleware(RequestDelegate next) { return new RequestDelegate(BazTaskRoutine); } 它等价于: public static RequestDelegate BazMiddleware(RequestDelegate next) { return BazTaskRoutine; } 还等价于: public static RequestDelegate BazMiddleware(RequestDelegate next) { return context => context.Response.WriteAsync("Baz"); } 最后,还等价于,也就是你提问的写法: public static RequestDelegate BazMiddleware(RequestDelegate next) => context => context.Response.WriteAsync("Baz");
好的,感谢两位大佬
github_36000833 2020-07-23
  • 打赏
  • 举报
回复
首先=>可以用来定义表达式主体,举例就是 public override string ToString() { return "hello world"; } 可以写成: public override string ToString() => "hello world"; 理解了这点,就可以理解 public static Task BazTaskRoutine(HttContext context) { return context.Response.WriteAsync("Baz"); } 等同于: public static Task ReturnBaz(HttContext context) => context.Response.WriteAsync("Baz"); 而Task BazTaskRoutine(HttContext context)满足于delegate Task RequestDelegate(HttContext context)的定义, 因此,要返回一个RequestDelegate,可以返回一个BazTaskRoutine。 public static RequestDelegate BazMiddleware(RequestDelegate next) { return new RequestDelegate(BazTaskRoutine); } 它等价于: public static RequestDelegate BazMiddleware(RequestDelegate next) { return BazTaskRoutine; } 还等价于: public static RequestDelegate BazMiddleware(RequestDelegate next) { return context => context.Response.WriteAsync("Baz"); } 最后,还等价于,也就是你提问的写法: public static RequestDelegate BazMiddleware(RequestDelegate next) => context => context.Response.WriteAsync("Baz");
八爻老骥 2020-07-23
  • 打赏
  • 举报
回复
其实就这意思。
public static RequestDelegate AAAMiddleware(RequestDelegate next){
RequestDelegate d=new RequestDelegate (Fun);

return d;
}

Task Fun(HttpContext context){

}
qq_30412191 2020-07-23
  • 打赏
  • 举报
回复
public static RequestDelegate AAAMiddleware(RequestDelegate next) { return async a => { await a.Response.WriteAsync("Foo=>"); await next(a); }; } ,比如说这种委托我该如何去调用。。。。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧