JetBrains Rider 2026.1 Help

コードインスペクション: 'foreach' ループで 'System.InvalidCastException' が発生する可能性あり。

設計上、 foreach では派生型への隠しキャストが可能です。 一方ではこれによって使いやすくなりますが、他方ではランタイム例外が発生する可能性があります。

JetBrains Rider は安全を重視しているため、以下の例のように安全でないキャストが検出された場合、可能性のある System.InvalidCastException を通知します。

public void Foo(IEnumerable<BaseType> list) { // Possible 'System.InvalidCastException' when casting from BaseType to DerivedType foreach (DerivedType item in list) { // do something } }

ここで JetBrains Rider が提案する クイックフィックスは、キャストを明示的にするのに役立ちます。 まだ安全ではありませんが、もはや隠れていません:

public void Foo(IEnumerable<BaseType> list) { foreach (var baseType in list) { var item = (DerivedType) baseType; // do something } }

キャストが意図されている場合は、明示的な型参照を var に置き換えることをお勧めします。

コレクションに IEnumerable が実装されていて、 BaseType に存在しない DerivedType のメンバーを使用している場合は、反復する前にコレクションをフィルター処理することをお勧めします。 これにより意味が変わることに注意してください。

public void Foo(IEnumerable<BaseType> list) { foreach (DerivedType item in list.OfType<DerivedType>()) { // do something only with objects of DerivedType } }
2026 年 6 月 12 日