0

次のコードは null 値の例外を発生させています

Record rec = (Record)obj.Records.Where(x => x.Id == no).SingleOrDefault();
4

2 に答える 2

4

が発生する可能性のある場所が 3 つありNullReferenceExceptionます (編集:であることがわかりIdましたint)。

  1. obj.Recordsもしそうobjならnull
  2. Records.Where(...)もしそうRecordsなら null
  3. x.Id列挙型にnullエントリがある場合(つまり、そのコンテキストでは です)。obj.Recordsxnull

そうでない場所は次のとおりです(コンパイルできると仮定します):

  1. SingleOrDefault複数のエントリがある場合にのみ例外をスローします。存在しない場合はnull、参照型、または値型の既定値を返します。
  2. (Record)鋳造。コンパイルエラーがないのでRecord、クラスだと思います。値がある場合、それが無効なキャストである (null 例外ではない) 場合にのみ、例外がスローされます。A(Record)nullは、参照型に対して完全に有効です。

デバッグしてステップスルーし、例外の原因を特定する必要があります。

于 2013-07-31T12:24:16.407 に答える
2

まあ、そうであるか、レコードが見つからないかのどちらobj.Recordsです。しかし、これも実際には機能しません... ...もちろんどこかで変数でない限り。null x.Id == nono

行を次のように変更します。

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault() as Record;

タイプのdefaultは になりますnull。さらに、あなたのコードを完全には知りませんが、前述の行が単に次のようになる可能性はほとんどありません。

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault();

Records種類の出品ではないRecordでしょうか?

于 2013-07-31T12:17:37.623 に答える