2

以下のようなラムダを記述しようとしていますが、構文が正しくありません。

Result = ListOfNumbers.Where(val => { val != Num1; val != Num2; }).ToList()[0];

私が得るエラーは

<int,int,bool>すべてのコード パスが 'System.Func '型のラムダ式で値を返すわけではありません

おそらくこれを行うにはもっと良い方法があります... ListOfNumbers に 1、2、3 という数字が (この順序で) あることはわかっています。この時点で Num1 と Num2 はどちらも 1、2、または 3 のいずれかになります (ただし、同じにはなりません)。結果を ListOfNumbers の「その他」の数値にしたいと考えています。それが明らかであることを願っています。もっときちんとした方法を思いつくことができれば、それを聞いてみたいです。

何かご意見は?

4

7 に答える 7

2

に変更する必要があります

val => val != Num1 && val != Num2 

あなたが提供したコードを関数として書くと、何が間違っているのかわかるかもしれません:

public bool Predicate(int val)
{
   val != Num1;
   val != Num2;
}

つまり、return ステートメントはどこにありますか?

ただし、実際にはエラーでコンパイルに失敗することに注意してくださいOnly assignment, call, increment, decrement, and new object expressions can be used as a statement-ラムダのコンパイラルールはわずかに異なるため、別のエラーが発生しますが、最終的には同じ種類の理由があります-あなたの場合、ラムダパスは何も返しません。

于 2012-06-22T10:52:53.250 に答える
1

あなたは実際にこれをしたかったのですか?

Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0];

また、リストに要素がない場合はどうなりますか?インデックスでアクセスする前に、それを確認することをお勧めします。

于 2012-06-22T10:53:21.953 に答える
1

Where句内でブール値を取得していないため、エラーが発生します。ラムダ式を次のように変更する必要があります。

Result = ListOfNumbers.Where(val =>  val != Num1 && val != Num2).ToList()[0];
于 2012-06-22T10:55:15.590 に答える
1

ラムダを次のように変更します。

ListOfNumbers.Where(val =>  val != Num1 && val != Num2)
于 2012-06-22T10:52:45.917 に答える
0

returnラムダ式でブロックを作成する場合は、ステートメントを使用する必要があります(ラムダが結果の型を定義する場合)。

最初の要素だけが必要な場合は、FirstOrDefault代わりに使用できますWhere

Result = ListOfNumbers.FirstOrDefault(val => val != Num1 && val != Num2 );

ブロックで:

Result = ListOfNumbers.FirstOrDefault(val => 
            { 
               var b = val != Num1 && val != Num2; 
               return b;
            } 
         );

使っ&&てたけど、どんな状態かよくわからない…

于 2012-06-22T11:00:39.023 に答える
0

System.Func<int,int,bool>where条件のようにブール値を返すデリゲートを期待するコードとして、次のように定義する必要があります。

Result = ListOfNumbers.Where(val => { val != Num1 && val != Num2; }).ToList()[0];
于 2012-06-22T10:57:02.377 に答える
0

私はあなたがこのようなものを作りたいと思う:

Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0];
于 2012-06-22T10:58:48.973 に答える