次の奇妙な状況があります:Pair
は aWidget
および anを保持する値型であり、特定の非 nullInt32
を返します。リストです。GetNonNullWidget()
Widget
List<Pair> lstWidgetsAndNumbers
次のコードは、ローカル変数の初期化時にnull 参照例外をスローします。
編集:
Widget widgetX = null; //this throws a NulLRefExn
widgetX = GetNonNullWidget();
var pairX = lstWidgetsAndNumbers.Find(pair => pair.First == widgetX); //but only if this line exists.
VisulStudio2008 のローカル ウィンドウに widgetX
赤い警告が表示され、「 '' is null 」というメッセージが表示されます。
メソッドでラムダを使用して 3 行目をカプセル化すると、すべて正常に動作します。
私は自分が思っていたよりもラムダをはっきりと理解していません。誰かがここで何が起こっているのか説明できますか?? ありがとう!
編集:
明確にするために: をGetNonNullWidget()
返しますWidget
。デバッグ中にチェックできるように、null ではありません。