我有一个类型为Breadcrumb的IList,它只是一个具有NavigationTitle,NavigationUrl和IsCurrent属性的轻量级类.它缓存在网络服务器上.我有一个方法可以构建当前的痕迹路径,直到第一个将IsCurrent设置为true的Breadcrumb ...使用下面的代码.它非常难看,绝对是一个快速的解决方案,但我很好奇,这可以很容易地重构为LINQ吗?
IList<Breadcrumb> crumbs = new List<Breadcrumb>();
bool foundCurrent = false;
for (int a = 0; a < cachedCrumbs.Count; a++)
{
crumbs.Add(crumbs[a]);
if (foundCurrent)
{
break;
}
foundCurrent = (crumbs[a + 1] != null && ((Breadcrumb)crumbs[a + 1]).IsCurrent);
}
Run Code Online (Sandbox Code Playgroud)
我按照我的想法输入了这个,所以它显示了一个思路,只是一个答案.
所以,我们最终得到:
bool foundCurrent = false;
var crumbs = cachedCrumbs.TakeWhile(crumb => !foundCurrent)
.Select(crumb => {
foundCurrent = crumb == null || !crumb.IsCurrent;
return crumb; });
Run Code Online (Sandbox Code Playgroud)
我没有试过这个,但我认为它应该有用......可能有一个更简单的方法.
编辑:我认为实际上是一个直foreach循环是在这种情况下简单.说了这么多,你可以写一个表现得像TakeWhile除了它的另一个扩展方法也返回这引起了条件失败的元素.那就简单到了:
var crumbs = cachedCrumbs.NewMethod(crumb => crumb == null || !crumb.IsCurrent);
Run Code Online (Sandbox Code Playgroud)
(我现在想不出这个方法的正确名称,因此NewMethod
!)
归档时间: |
|
查看次数: |
463 次 |
最近记录: |