簡體   English   中英

在C#中有條件的foreach循環

[英]foreach loop with condition in c#

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

如果DoSomething()方法不使用找到的過濾器:

if (PageFilterInformation.Any(filter => filter.Ancestor == myParent))
{
   DoSomethng();
}

編輯:由於評論中提供了新的要求,因此進行了更新

如果需要將找到的過濾器傳遞到DoSomething()方法中:

var filter = PageFilterInformation.FirstOrDefault(f => f.Ancestor == myParent);
if (filter != null)
{
   DoSomething(filter);
}

好吧,這取決於您在執行DoSomething時是否需要使用第一個filter (看起來確實如此)。 但是可以,您可以使用LINQ縮短此代碼。

如果您需要filter

var filter = PageFilterInformation.FirstOrDefault(filter => filter.Ancestor == myParent);
if(filter != null)
{
    DoSomething()...
}

如果不是,則可以使用Any方法。

if (PageFilterInformation.Any(filter => filter.Ancestor == myParent)
{
    DoSomething()...
}
foreach (PagerPageFilterInformation filter in PageFilterInformation.Where(f => f.Acestor==myParent))
        {
                DoSomething()...
        }

由於您使用的是filter變量,因此我將使用以下構造:

var filter = PageFilterInformation.FirstOrDefault(f => f.Ancestor == myParent);
if (filter != null)
{
    DoSomething(filter);
}

代碼變得更容易閱讀,因為我不必遍歷循環並弄清楚它停在第一個找到的元素上。

如果PageFilterInformation是IEnumerable,則可以使用System.Linq的擴展Where方法。

擁有較短的代碼並不意味着效率更高,您應該了解這些語句實際上作為IL產生的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM