[英]c# linq lambda where not
我遵循了有關lambda表達式的本教程,並創建了以下代碼;
Func<int, bool> isHighNUmber = s => s > 10;
IList<int> intList = new List<int>() { 1, 3,9, 2, 63, 236, 32, 474, 83, 832, 58, 3458, 35, 8, 4 };
Console.WriteLine("All numbers.");
foreach (int x in intList)
{
Console.WriteLine(x);
}
Console.WriteLine("High Numbers");
foreach(int x in intList.Where(isHighNUmber).ToList<int>())
{
Console.WriteLine(x);
}
而且效果很好,現在我想嘗試僅獲取低數字,所以我嘗試了
foreach(int x in intList.Where(!isHighNUmber).ToList<int>())
foreach(int x in intList.Where(isHighNUmber == false).ToList<int>())
以及上述語法的變體,但無法使其正常工作。 我還尋找了類似WhereNot的函數
foreach(int x in intList.WhereNot(!isHighNUmber).ToList<int>())
替換where函數,但是找不到合適的函數。我可以輕松地添加另一個Func來實現isHighNumber的相反功能,但是我想如果那個func非常大,則您不想完全重寫它。 我應該如何在where方法中獲得lambda Func的反面?
嘗試這個:
foreach(int x in intList.Where(x=> !isHighNUmber(x)).ToList<int>())
除非您創建否定isHighNumber
isNotHighNumber
函數,否則不能使用此語法糖
我認為在這種情況下,您唯一的選擇是實際調用該函數
foreach (int x in intList.Where(x=>! isHighNUmber(x)).ToList<int>())
{
Console.WriteLine(x);
}
您也可以使用Except
但是效率不高,因為它可能會在序列上迭代兩次。
Console.WriteLine("Low Numbers");
foreach (int x in intList.Except(intList.Where(isHighNUmber)).ToList<int>())
{
Console.WriteLine(x);
}
您應該如下所示更新Func
:
Func<int, bool, bool> isHighNUmber = (s, isGreaterCheck) => { return isGreaterCheck ? s > 10 : s <= 10 ;};
然后如下所述編寫foreach
:
Console.WriteLine("Low Numbers");
foreach(int x in intList.Where(x => isHighNUmber(x, false)).ToList<int>())
{
Console.WriteLine(x);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.