c#linq lambda不在哪里

c#linq lambda不在哪里,c#,linq,lambda,C#,Linq,Lambda,我遵循关于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 in

我遵循关于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);
}
Func-isHighNUmber=s=>s>10;
IList intList=new List(){1,3,9,2,63,236,32474,83832,583458,35,8,4};
控制台。WriteLine(“所有数字”);
foreach(intList中的intx)
{
控制台写入线(x);
}
控制台写入线(“高数字”);
foreach(intList.Where(isHighNUmber.ToList()中的int x)
{
控制台写入线(x);
}
它很好用,现在我想试着只得到较低的数字,所以我试了

foreach(int x in intList.Where(!isHighNUmber).ToList<int>())

foreach(int x in intList.Where(isHighNUmber == false).ToList<int>())
foreach(intList.Where(!isHighNUmber.ToList()中的int x)
foreach(intList.Where(isHighNUmber==false.ToList()中的int x)
和上述语法的变体,但无法使其工作。我还寻找了WhereNot这样的函数

foreach(int x in intList.WhereNot(!isHighNUmber).ToList<int>())
foreach(intList.WhereNot(!isHighNUmber.ToList())中的int x)
替换where函数,但找不到合适的函数。我可以很容易地添加另一个Func来执行与isHighNumber相反的操作,但我想如果该Func非常大,您不会希望完全重写它。在where方法中,如何得到lambda Func的相反值?

尝试以下方法:

  foreach(int x in intList.Where(x=> !isHighNUmber(x)).ToList<int>())
foreach(intList.Where(x=>!isHighNUmber(x)).ToList()中的int x)
除非创建否定isHighNumber的函数,否则不能使用此语法糖。请尝试以下操作:

  foreach(int x in intList.Where(x=> !isHighNUmber(x)).ToList<int>())
foreach(intList.Where(x=>!isHighNUmber(x)).ToList()中的int x)

除非您创建一个否定isHighNumber的函数,否则您不能使用这种语法糖。我认为在这种情况下,您唯一的选择就是实际调用该函数

foreach (int x in intList.Where(x=>! isHighNUmber(x)).ToList<int>())
{
     Console.WriteLine(x);
}
foreach(intList.Where(x=>!isHighNUmber(x)).ToList()中的int x)
{
控制台写入线(x);
}

我认为在这种情况下,您唯一的选择是实际调用函数

foreach (int x in intList.Where(x=>! isHighNUmber(x)).ToList<int>())
{
     Console.WriteLine(x);
}
foreach(intList.Where(x=>!isHighNUmber(x)).ToList()中的int x)
{
控制台写入线(x);
}

您应该更新您的
函数,如下所示:

Func<int, bool, bool> isHighNUmber = (s, isGreaterCheck) => { return isGreaterCheck ? s > 10 :  s <= 10 ;};

您应该更新
Func
,如下所示:

Func<int, bool, bool> isHighNUmber = (s, isGreaterCheck) => { return isGreaterCheck ? s > 10 :  s <= 10 ;};

除了
之外,您还可以使用
,但效率不高,因为它可能会在序列上迭代两次

Console.WriteLine("Low Numbers");
foreach (int x in intList.Except(intList.Where(isHighNUmber)).ToList<int>())
{
    Console.WriteLine(x);
}
Console.WriteLine(“低数字”);
foreach(intList.Except(intList.Where(isHighNUmber)).ToList()中的int x)
{
控制台写入线(x);
}

除了
之外,您还可以使用
,但效率不高,因为它可能会在序列上迭代两次

Console.WriteLine("Low Numbers");
foreach (int x in intList.Except(intList.Where(isHighNUmber)).ToList<int>())
{
    Console.WriteLine(x);
}
Console.WriteLine(“低数字”);
foreach(intList.Except(intList.Where(isHighNUmber)).ToList()中的int x)
{
控制台写入线(x);
}

“实际调用”?使用
Where(IsHighNumber)
时也会调用该方法,它只是
Where(x=>x.IsHighNumber(x))
的快捷方式。可能显式调用更好description@MiniverCheevy但你没有调用它。您正在创建一个新方法,该方法的主体将调用它。@himbrombeer严格来说不是一个快捷方式
其中
接受一个委托,这就是
IsHighNumber
已经是的,其中as
x=>IsHighNumber(x)
是另一个委托,它包装了
IsHighNumber
“实际调用”?使用
Where(IsHighNumber)
时也会调用该方法,它只是
Where(x=>x.IsHighNumber(x))
的快捷方式。可能显式调用更好description@MiniverCheevy但你没有调用它。您正在创建一个新方法,该方法的主体将调用它。@himbrombeer严格来说不是一个快捷方式
其中
接受一个委托,而这正是
IsHighNumber
已经是的,其中as
x=>IsHighNumber(x)
是另一个委托,它包装
IsHighNumber
s<10
不是
s>10
的对立面,也许你的意思是
s
s
s<10
不是
的对立面,也许你的意思是
s