LINQ - Restriction Operators

sagegz 2014-07-07 09:34:48
This sample demonstrates an indexed Where clause that returns digits whose name is shorter than their value.

public void Linq5()
{
string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

var shortDigits = digits.Where((digit, index) => digit.Length < index);

Console.WriteLine("Short digits:");
foreach (var d in shortDigits)
{
Console.WriteLine("The word {0} is shorter than its value.", d);
}
}

digits.Where((digit, index) => digit.Length < index);
无法理解。参数的位置调换可以么?index用别的名字可以么?
这2个参数分别表达什么意思?
...全文
140 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-07-07
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390781341
sagegz 2014-07-07
  • 打赏
  • 举报
回复
caozhy,看了你几年前对LINQ帖子的回复,你那篇帖子对我非常有触动。 我才开始看LINQ 101 Examples,差不多看完了。 LINQ的内部机制该看哪本书呢? ASP.NET4高级程序设计只是讲了些内部机制的皮毛而已。
threenewbee 2014-07-07
  • 打赏
  • 举报
回复
引用 4 楼 sagegz 的回复:
第2个参数必须是索引么? 比如numbers.TakeWhile((n, index) => n >= index);
要看这个操作符是否提供了这个重载形式。
sagegz 2014-07-07
  • 打赏
  • 举报
回复
第2个参数必须是索引么? 比如numbers.TakeWhile((n, index) => n >= index);
  • 打赏
  • 举报
回复
位置不可以调换;你的index,只表示的当前对象再集合中的索引,换成i其它是没关系的。 一个表示当前对象,一个表示索引。不难理解。
threenewbee 2014-07-07
  • 打赏
  • 举报
回复
参数位置调换不可以,名字更改可以。 这很好理解,Lambda相当于一个函数,区别是,你写好了,由LINQ反过来调用,而不是一般函数你自己调用。 我们知道,定义函数的时候,函数的参数名可以随便,但是,函数的参数个数、类型、顺序是约定好的,不能错。 比如 int sub(int x, int y) { return x - y; } 如果你写成 int sub(int a, int b) { return a - b; } 那么对于调用代码: int x = sub(1, 2); 来说,不用修改,它们是等价的。 但是显然如果你写 int sub(int y, int x) { return x - y; } 那么 int x = sub(1, 2); 就不能这么写了。
sagegz 2014-07-07
  • 打赏
  • 举报
回复
貌似懂了。digit和index可以换成i和j. 它们分别表示数组中的元素。 对么? 我以为可以自动从字符串转换为数字呢 其实下标的位置刚好是英文的数字。
sagegz 2014-07-07
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
http://bbs.csdn.net/topics/390781341
很好很强大,谢谢~!

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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