Sequence contains no elements の原因と直し方
LINQのFirst()を、要素が1つもないシーケンスに対して呼び出すと発生します。
エラーメッセージの読み方
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
System- 名前空間 — System なら標準の基本例外です
InvalidOperationException- 例外クラス — 何が起きたか。ここを検索するのが最短です
Sequence contains no elements- 詳細メッセージ — どの値が問題だったか
at Program.Main(String[] args) in Program.cs:line 4- 発生箇所 — スタックトレースの先頭行
このエラーが出る典型パターン
パターン1
1 class Program { 2 static void Main(string[] args) { 3 var nums = new System.Collections.Generic.List<int> { }; ^ 4 System.Console.WriteLine(System.Linq.Enumerable.First(nums)); 5 } 6 }
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
at Program.Main(String[] args) in Program.cs:line 4
First()は要素が1つもないシーケンスに対して呼ぶと例外を投げます。空かどうか分からない場合はFirstOrDefaultを使います。
直し方: (空) を 1, 2, 3 にします。
広告
広告スロット(未設定)
パターン2
1 class Program { 2 static void Main(string[] args) { 3 var names = new System.Collections.Generic.List<string> { }; ^ 4 System.Console.WriteLine(System.Linq.Enumerable.First(names)); 5 } 6 }
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
at Program.Main(String[] args) in Program.cs:line 4
文字列のリストでも規則は同じです。空リストにFirst()は使えません。
直し方: (空) を "a", "b" にします。
パターン3
1 class Program { 2 static void Main(string[] args) { 3 var nums = new System.Collections.Generic.List<double> { }; ^ 4 System.Console.WriteLine(System.Linq.Enumerable.First(nums)); 5 } 6 }
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
at Program.Main(String[] args) in Program.cs:line 4
double型のリストでも同じ例外になります。型に関わらずSequenceが空であることが原因です。
直し方: (空) を 1.5, 2.5 にします。
よくある誤解
「最初の要素を取る」だけの単純な操作に見えますが、空である可能性を考慮しないと実行時エラーになります。空も許すならFirstOrDefaultを使います。
まとめ
Sequence contains no elementsは中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。