关于lamda表达式和linq的问题

圣殿骑士18 2015-04-16 02:39:11
大家好,碰到一个很奇怪的问题。我测试list的自定义排序。想解决字符串按数字排序的问题。
写了一些测试代码,发现lamda表达式没起作用,看起来很简单,不知道问题在哪里?


List<string> list = new List<string>();
list.Add("1");
list.Add("2");
list.Add("10");

//默认排序
Console.WriteLine("默认排序");
list.Sort();
foreach (string v in list)
{
Console.WriteLine(v);
}

//用Lamda表达式实现转换int后排序
Console.WriteLine("用Lamda表达式实现排序");
list.Add("3");
//list.OrderBy<string, int>(s => int.Parse(s)); //原始的写法
list.OrderBy(s => int.Parse(s)); //简化的写法
foreach (string v in list)
{
Console.WriteLine(v);
}

//用linq实现转换int后排序
Console.WriteLine("用linq实现排序");
list.Add("4");
var query = from l in list
orderby int.Parse(l)
select l;
foreach (string v in query)
{
Console.WriteLine(v);
}


执行的结果是,linq有效,lamda没起作用,输出结果如下:
默认排序
1
10
2
用Lamda表达式实现排序
1
10
2
3
用linq实现排序
1
2
3
4
10

请高手指点。
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2015-04-16
  • 打赏
  • 举报
回复
谢谢!原来如此。
  • 打赏
  • 举报
回复
list.OrderBy(s => int.Parse(s)); 你排序了,但list没排序 你应该要list = list.OrderBy(s => int.Parse(s)).ToList() List.Sort才会是内部排序
xdashewan 2015-04-16
  • 打赏
  • 举报
回复
list = list.OrderBy(s => int.Parse(s)).ToList();
从昨天中午到今天上午,我读完了《C#图解教程》,觉得非常不错,因此推荐给大家。卓越网销售链接 本书原名为《Illustrated C# 2008》。 这本书的书名看起来好像一本泛泛而谈的傻瓜书,其实并非如此! 1:这本书最大好处,就是它是一本真正讲道理的书。这一点很难得,因为大多数类似的书都是“how-to”书,告诉你怎么操作,而对“为什么要这么做”很少涉及。甚至很多书连“怎么操作”都讲不清楚。 2:其次,这本书的结构非常合理,把C#这样一个概念相对庞杂的讲解对象,很好的解构为若干个方面,加以介绍,而且在各个部分中,又能够很好地相互印证。 3: 再次,对于这种书而言,所举的例子是否精当,就是一本书的生命。我们自己也写过书,因此对此深有体会。一本书最终的效果好坏,很大程度上取决于所举例子是否恰当,这是一个作者能力的关键因素。这本书的例子就很好,每一个例子都简单明了,而又非常充分恰当地说明了他所要需要演示的概念。 4: 本书把C# 3.0中的新特性也很好地融入内容,非常好,比如lamda表达式Linq,对于ASP.net开发支持非常有力,但是基本上ASP.net的相关资料中,都不会详细介绍它们的原理,使你感觉很难理解,而这本书则从最基础的底层概念,把它们介绍的非常清楚。这样你再去看那些代码带有lamda表达式的 ASP.net案例代码,就变得非常轻松了。

110,571

社区成员

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

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

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