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 かどうかだけ見ておけば、あとは安全に処理できそうです。
この記事が気に入ったらサポートをしてみませんか?