C# - OfType でコレクションをフィルタリングしてみた

コレクションをフィルタリングする OfType というメソッドがあります。
このメソッドの動きと結果を再確認しました。

(いままで何となく雰囲気で使っていたのもあったので)

動作は .NET 8 で確認しました。


まずは正常な使い方から。

次のコードはコレクションの要素を string でフィルタリングします。

この結果は要素を1つだけ持ったコレクションが返ります。
要素の値は "Text" です。

var list = new System.Collections.ArrayList()
{
    null,
    3.0,
    new Dictionary<string, object>(),
    "Text",
};

// string でフィルタリングする
//   → "Text" という値の要素を1個持ったコレクションが返る
var results = list.OfType<string>();


続けてコレクションの中に該当する型がなかった場合です。

このケースは0個の要素を持ったコレクションが返ります。

var list = new System.Collections.ArrayList()
{
    null,
    3.0,
    new Dictionary<string, object>(),
};

// string でフィルタリング
var results = list.OfType<string>();


同じことですが、もとのコレクションが0件だった場合も0個の要素を持ったコレクションが返ります。

var list = new System.Collections.ArrayList();
var results = list.OfType<string>();


コレクションが null だった場合は、例外 `ArgumentNullException` が発生します。
「Value cannot be null. (Parameter 'source') 」だそうです。

ArrayList? list = null;
var results = list.OfType<string>();


null 条件演算子( ?. )を使うと null が返ります。
まぁ null 条件演算子の動作どおりだよね、という結果です。

ArrayList? list = null;
var results = list?.OfType<string>();


というわけで、フィルタリング対象のコレクションが null かどうかだけ見ておけば、あとは安全に処理できそうです。


この記事が気に入ったらサポートをしてみませんか?