JetBrains Rider 2026.1 Help

コードインスペクション: 型チェックとキャストをマージできます

型テスト is 演算子は、古典的な形式(Expression is Type )で、 Expression の実行時型が Type と互換性があり、 Expression の結果が null でない場合にのみ true を返します。

次の例のように、キャストする前に is を使用して互換性を確認する場合、少なくとも 2 つの問題があります。

  • 理由もなく型チェックを二度行っており、これをループ内で実行するとパフォーマンスに影響する可能性があります。

  • objnull の場合、プログラムの実行が if ステートメントに入らないという事実は、このコードを読んだ人にはすぐにはわかりません。

void Test(object obj) { if (obj is string) { string str = (string) obj; // do something } }

JetBrains Rider は、このコードを異なる 2 通りの方法で修正することを提案しています。

パターンマッチング変数を使用する

C# 7.0 からは、 is 演算子を利用して変数の型テストと初期化をよりエレガントに 組み合わせる ことができます: Expression is Type variable。 これをこの例に適用すると、次のようになります:

void Test(object obj) { if (obj is string) { string str = (string) obj; // do something } }
void Test(object obj) { if (obj is string str) { // do something } }

独立した型のテストと null のチェック

as 演算子を使用したセーフキャストを使用してコードを書き直してから、null チェックを行うこともできます。 このようにして、2 つではなく 1 つのキャストを作成し、関心の分離を改善します。

void Test(object obj) { if (obj is string) { string str = (string) obj; // do something } }
void Test(object obj) { var str = obj as string; if (str != null) { // do something } }
2026 年 6 月 12 日