コードインスペクション: '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 日