带有c#条件的foreach循环

时间:2011-11-09 11:06:53

标签: c# foreach conditional-statements

我在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

5 个答案:

答案 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。

相关问题