欢迎欢迎
其实LINQ里的很多东西,都是我们原先在做的
举个简单的例子吧,就拿很觉的Where方法
平时我们经常这么写
foreach (ListItem item in checkBoxList.Items)
{
if (item.Checkced)
{
Debug.WriteLine(item.Value)
}
}
如果用LINQ呢
var checked = checkBoxList.Items.Where(item => item.Checked);
foreach (ListItem item in checked)
{
Debug.WriteLine(item.Value)
}
这就使得代码清晰了很多,事实上Where内部是基于yield的延迟加载的实现,效率和第一种写法是一样的
我们可以再来改造一下,自己扩展一个方法
public static void TakeAction<T>(this IEnumerable<T> list, Action<T> action)
{
foreach (T item in list)
{
action(item);
}
}
这就是一种简单的理念,通过扩展方法给IEnumerable<T>中的每个元素执行一个无返回值的方法
然后我们可以写得更简单
checkBoxList.Items.Where(item => item.Checked).TakeAction(item => Debug.WriteLine(item.Value));
这样更舒服了吧?