2017-03-03 1 views
0

임 다음 this 람다 식에 대한 자습서를 작성하고 다음 코드를 작성하십시오.C# linq 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>()) 

같은 함수를 찾았지만 쉽게 isHighNumber의 반대를 할 다른 Func을 추가 할 수있는 적절한 나라면을 찾을 수 있지만 FUNC 당신이 매우 큰 경우 내가 상상할 수 없었다 그것을 완전히 다시 쓰고 싶지 않을 것입니다. where 메서드에서 lambda Func의 반대를 어떻게 얻을 수 있습니까?

답변

6

이 시도 : 당신이

0

isHighNumber가 나는 경우에 당신의 유일한 옵션은 실제로 기능

foreach (int x in intList.Where(x=>! isHighNUmber(x)).ToList<int>()) 
{ 
    Console.WriteLine(x); 
} 
를 호출하는 생각 부정 함수를 작성하지 않는 한

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

당신은이 문법 설탕을 사용할 수 없습니다

+0

"실제로 호출 하시겠습니까?" 이 메소드는'Where (IsHighNumber)'를 사용할 때도 호출되며'Where (x => x.IsHighNumber (x)) '의 바로 가기입니다. – HimBromBeere

+0

어쩌면 명시 적으로 호출됩니다 더 나은 설명입니다 –

+0

@MiniverCheevy하지만 당신은 그것을 호출하지 않습니다. 몸체가 그것을 호출하는 새로운 메소드를 생성하고 있습니다. – Servy

-1

아래와 같이 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); 
} 
+1

's <10'은's> 10과 반대가 아닙니다.'WhereH'는 델리게이트를 받아서'IsHighNumber'가 이미있는 곳입니다. ', 아마's = = 10'을 의미할까요? – juharr

+0

@juharr : 오른쪽. 내 잘못이야. 업데이트 된 :) – SpiderCode

0

또한 Except를 사용할 수 있지만 두 번 순서를 반복 가능성 것이기 때문에 그것이 효율적하지 않을 것입니다.

Console.WriteLine("Low Numbers"); 
foreach (int x in intList.Except(intList.Where(isHighNUmber)).ToList<int>()) 
{ 
    Console.WriteLine(x); 
}