我在c#中有这个foreach循环,因为我是c#的新手,我想知道这是否可以写得更短(条件是循环的一部分
foreach (PagerPageFilterInformation filter in PageFilterInformation)
{
if (filter.Ancestor == myParent)
{
DoSomething()...//Using filter
break;
}
}
我尝试过:
PagerPageFilterInformation filter = PageFilterInformation.FirstOrDefault(filter => filter.Ancestor == myParent);
if(filter != null)
{
DoSomething()...}
但它没有用。可能是因为班级:
PagerPageFilterInformation
继承自班级:
PageFilterInformation
答案 0 :(得分:5)
如果DoSomething()
方法未使用找到的过滤器:
if (PageFilterInformation.Any(filter => filter.Ancestor == myParent))
{
DoSomethng();
}
编辑:由于评论中提供了新要求,因此更新
如果您需要将找到的过滤器传递到DoSomething()
方法:
var filter = PageFilterInformation.FirstOrDefault(f => f.Ancestor == myParent);
if (filter != null)
{
DoSomething(filter);
}
答案 1 :(得分:2)
这取决于你filter
时你需要使用第一个DoSomething
(看起来你好像这样)。但是,您可以使用LINQ缩短此代码。
如果您需要filter
:
var filter = PageFilterInformation.FirstOrDefault(filter => filter.Ancestor == myParent);
if(filter != null)
{
DoSomething()...
}
如果没有,您可以使用Any方法。
if (PageFilterInformation.Any(filter => filter.Ancestor == myParent)
{
DoSomething()...
}
答案 2 :(得分:2)
foreach (PagerPageFilterInformation filter in PageFilterInformation.Where(f => f.Acestor==myParent))
{
DoSomething()...
}
答案 3 :(得分:1)
由于你使用的是filter
变量,我会使用这个结构:
var filter = PageFilterInformation.FirstOrDefault(f => f.Ancestor == myParent);
if (filter != null)
{
DoSomething(filter);
}
代码变得更容易阅读,因为我不必通读循环并找出它停在第一个找到的元素。
答案 4 :(得分:0)
如果PageFilterInformation是一个IEnumerable,你可以使用System.Linq的扩展名Where方法;
使用更短的代码并不意味着更高效,您应该理解这些语句实际产生的IL。