2017-03-03 13 views
0

私はthisラムダ式についてのチュートリアルに続き、次のコードを作成しました。C#linqラムダここではない

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を追加することができ、適切なone.Iを見つけるが、それ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

おそらく明示的に呼び出すisはより良い説明です –

+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の反対ではありません。 '、おそらくあなたは' s <= 10'を意味しましたか? – juharr

+0

@juharr:right。私の悪い。更新しました :) – SpiderCode

0

またExceptを使用することができますが、それはおそらく二回シーケンスを反復するからであるほど効率的ではないであろう。

Console.WriteLine("Low Numbers"); 
foreach (int x in intList.Except(intList.Where(isHighNUmber)).ToList<int>()) 
{ 
    Console.WriteLine(x); 
} 
関連する問題