[英]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.