コードインスペクション:キャスト式はラムダの戻り値の型に置換できます
C# の C スタイルのキャスト式は、静的アップキャストと動的ダウンキャストの両方にすることができ、どちらも同じ構文を持ちます。 型階層を念頭に置いておかないと、キャストが安全なアップキャストかランタイムダウンキャストかを判断する方法がありません。 さらに、静的アップキャストは、リファクタリング中に誤って動的ダウンキャストに変わる可能性があります。 これらの問題を回避し、コードの脆弱性を軽減するために、このインスペクションでは、可能な場合はキャストの代わりに明示的な型を使用することを提案しています。
アップキャストがラムダ式の本体内で発生する場合、ラムダ式の return アノテーションを使用してキャスト式を取り除くことができます。
interface IBase;
interface IDerived : IBase;
class Derived : IDerived;
class Sample
{
public Sample()
{
var derivedInstance = new Derived();
IEnumerable<IDerived> derivedItems =
[derivedInstance, derivedInstance];
var baseItems = derivedItems.Select(x => (IBase)x).ToList();
}
}
interface IBase;
interface IDerived : IBase;
class Derived : IDerived;
class Sample
{
public Sample()
{
var derivedInstance = new Derived();
IEnumerable<IDerived> derivedItems =
[derivedInstance, derivedInstance];
var baseItems = derivedItems.Select(IBase (x) => x).ToList();
}
}
2026 年 7 月 16 日