ReSharper 2026.1 Help

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

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

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

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

ここで ReSharper が提案する クイックフィックスは、キャストを明示的にするのに役立ちます。 依然として安全ではありませんが、もう隠されていません:

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 日