メイン画像

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

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 かどうかだけ見ておけば、あとは安全に処理できそうです。




アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事