linq请教

stevenjin 2020-11-08 03:47:02
以下o=>o不指定具体字段,是什么语法?

 Queue<double> dv = new Queue<double>();
dv.Enqueue(12.33);
dv.Enqueue(22.33);
dv.Enqueue(14.133);
dv.Enqueue(12.673);
dv.Enqueue(12.98);
dv.Enqueue(12.51);
dv.Enqueue(52.33);
dv.Enqueue(152.33);
dv.OrderByDescending(o=>o)
...全文
2807 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢楼主分享
wanghui0380 2020-11-09
  • 打赏
  • 举报
回复
https://www.jianshu.com/p/f019f980a50d 来一篇JavaScript的文章,这东西已经无法解释了。你看得懂就是看得懂,看不懂解释不了
wanghui0380 2020-11-09
  • 打赏
  • 举报
回复
=> 的左半边是形参 o=> o等价 写法 T G<T>(T obj) { retrun obj; } G(obj); 如果你觉着他很多余,那么我们说外面套个循环 void F<T>(T[] source) foreach T obj in source { xxx(obj) } 也就是JavaScript里面的人说的闭包,说的高阶函数,F(G(x)),如果你无非理解,我们没办法解释。毕竟这东西用嘴巴,用书都无力解释,能明白的一眼能明白,不能明白解释不了
datafansbj 2020-11-09
  • 打赏
  • 举报
回复
Linq 里面的 o => o,表示定义一个匿名函数,参数是 o,结果是 o,等价于:
o => { return o; }

dv.OrderByDescending(o=>o) 表示降序排序,按照元素 o 的本身值进行排序。
wanghui0380 2020-11-09
  • 打赏
  • 举报
回复
引用 5 楼 stevenjin 的回复:
好像不是这么回事啊,我换成float不行的,报上下文中不存在f dv.OrderByDescending(o=>f)
基本上你无法理解函数式写法, o是你传递进去的参数,那么f呢?f是什么?他是石头里蹦出来的么?f没有任何地方定义的
stevenjin 2020-11-09
  • 打赏
  • 举报
回复
引用 2 楼 积极流年 的回复:
jdk8,lamda表达式

我认为说法不对,如下面这样也是可以的,这个字段不代码任何类型
OrderByDescending(af => af)
stevenjin 2020-11-09
  • 打赏
  • 举报
回复
f => f 这样可以
stevenjin 2020-11-09
  • 打赏
  • 举报
回复
好像不是这么回事啊,我换成float不行的,报上下文中不存在f
dv.OrderByDescending(o=>f)
wanghui0380 2020-11-09
  • 打赏
  • 举报
回复
public readonly struct Double : IComparable, IComparable<Double>, IConvertible, IEquatable<Double>, IFormattable 不指定,是因为排序自然需要比较大小,而Double本身就已经实现了比较大小的接口。所以他自己可以默认转换
风中暮雨 2020-11-09
  • 打赏
  • 举报
回复
因为这个队列中只有一个字段,就是double类型的字段,因此o 就代表了这个字段
积极流年 2020-11-09
  • 打赏
  • 举报
回复
jdk8,lamda表达式
八爻老骥 2020-11-09
  • 打赏
  • 举报
回复
简单讲就是传入一个当前元素,然后返回一个用于比较的值。double是个简单类型,本身就可以用于比较的,所以直接返回即可,如果是复杂对象,只能字段进行比较,那就返回某个字段值进行比较。

OrderBy的参数是一个用Lamda表达的委托实例,其引用的是个匿名方法,具体实现就是:

OrderBy(new Fun<double,double>(F));

double F(double a){return a;}
Mine is now! 2020-11-09
  • 打赏
  • 举报
回复
有意思,查验,同求
ziqi0716 2020-11-09
  • 打赏
  • 举报
回复
dv.OrderByDescending(o=>o),读下来:dv,按照降序排列,(按照成员的什么来比较呢?按照成员本身)
X-i-n 2020-11-08
  • 打赏
  • 举报
回复
因为这个o就是个double啊

110,534

社区成员

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

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

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