中級のC#エラー 36問
12種類のエラーを、それぞれ複数パターンずつ収録しています。
- Collection was modified の原因と直し方foreach中にList等のコレクションの要素数を変えると発生します。反復子(イテレータ)が内部状態の不整合を検知する仕組みです。
- struct(値型)とclass(参照型)のコピーの違いstructは値型、classは参照型です。代入や引数渡しのたびに値そのものがコピーされるか、参照が共有されるかが変わります。
- == が参照を比較してしまう理由classの==は既定でオブジェクトの参照(同一性)を比較します。フィールドの値が同じでも、別々に生成したインスタンスはfalseになります。
- Unable to cast object の原因と直し方object型に格納された値型(ボックス化)を、元の型と異なる型でアンボックスしようとすると発生します。
- The given key was not present in the dictionary の原因と直し方Dictionaryに登録されていないキーをインデクサで読み取ろうとすると発生します。
- ArgumentOutOfRangeException の原因と直し方List<T>のインデクサに範囲外の値を渡すと発生します。配列のIndexOutOfRangeExceptionとは異なる例外クラスです。
- Sequence contains no elements の原因と直し方LINQのFirst()を、要素が1つもないシーケンスに対して呼び出すと発生します。
- does not implement interface member の原因と直し方インターフェースを実装すると宣言したクラスが、そのメンバーの一部を実装していないときに出るコンパイルエラーです。
- is inaccessible due to its protection level の原因と直し方privateなメンバーにクラスの外部からアクセスしようとすると出るコンパイルエラーです。
- 整数のオーバーフローが例外にならない理由int型の範囲(約-21億〜21億)を超える計算をしても、既定では例外にならず値が折り返ります。
- cannot be used as type parameter の原因と直し方where T : IComparable<T>のような制約を満たさない型を、ジェネリックメソッドの型引数として渡そうとすると出るコンパイルエラーです。
- 文字列を変更したはずが変わらない理由string型は不変(イミュータブル)です。ToUpperやReplace、Trimなどのメソッドは新しい文字列を返すだけで、元の変数は書き換えません。