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