InvalidOperationException
オブジェクトの現在の状態では無効な操作を実行した場合に発生するC#の例外
概要
System.InvalidOperationExceptionは、オブジェクトの現在の状態に対して無効なメソッド呼び出しを行った場合に発生します。LINQのSingle()やFirst()で条件に一致する要素がない場合に特に頻繁に発生します。
エラーメッセージ
System.InvalidOperationException: Sequence contains no elements
at System.Linq.ThrowHelper.ThrowNoElementsException()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
原因
- 空のシーケンスにFirst()/Single()を使用: 要素が存在しないコレクションに対して呼び出し
- Single()で複数要素が該当: 一意であるべきクエリが複数の結果を返した
- 列挙中のコレクション変更: foreachループ内でコレクションを変更
- 無効な状態での操作: DbContextが破棄済み、Streamが閉じた後のアクセスなど
解決策
1. OrDefault系メソッドを使用する
要素が存在しない可能性がある場合はOrDefault付きメソッドを使う。
| |
2. Any()で事前チェックする
| |
3. Try-パターンを実装する
操作が失敗する可能性がある場合、例外を投げずに結果を返す。
| |
4. 状態チェックを行う
操作前にオブジェクトの状態を確認する。
| |
5. Entity Frameworkでの対処
| |
関連エラー
- NullReferenceException - null参照アクセスで発生
- ArgumentOutOfRangeException - 範囲外アクセスで発生
C# の他のエラー
この記事は役に立ちましたか?