コードインスペクション: 型チェックとキャストをまとめることができます
型テスト is 演算子は、古典的な形式(Expression is Type )で、 Expression の実行時型が Type と互換性があり、 Expression の結果が null でない場合にのみ true を返します。
次の例のように、キャストする前に is を使用して互換性を確認する場合、少なくとも 2 つの問題があります。
理由もなく型チェックを繰り返しており、ループ内で行うとパフォーマンスに影響を及ぼす可能性があります。
objがnullの場合、プログラムの実行がifステートメントに入らないという事実は、このコードを読んだ人にはすぐにはわかりません。
void Test(object obj)
{
if (obj is string)
{
string str = (string) obj;
// do something
}
}
ReSharper はこのコードを異なる方法で修正することを提案しています。
パターンマッチング変数を使用する
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 日