通常、条件演算子を使用する場合の構文は次のとおりです。
int x = 6;
int y = x == 6 ? 5 : 9;
派手なことは何もなく、かなり簡単です。
では、Lambda を Func 型に割り当てるときにこれを使用してみましょう。説明させてください:
Func<Order, bool> predicate = id == null
? p => p.EmployeeID == null
: p => p.EmployeeID == id;
それは同じ構文であり、動作するはずですか? 右?どういうわけかそうではありません。コンパイラは、次のような不可解なメッセージを表示します。
エラー 1 'ラムダ式' と 'ラムダ式' の間に暗黙的な変換がないため、条件式の型を特定できません
次に、構文を変更したところ、次のように機能しました。
Func<Order, bool> predicate = id == null
? predicate = p => p.EmployeeID == null
: predicate = p => p.EmployeeID == id;
なぜ最初の方法でうまくいかないのか不思議です。
(補足: int 値と null を比較するときは、object.Equals を使用するだけであることがわかったため、このコードは不要になりました)