C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のOfType()メソッドの使い方:要素の型でコレクションをフィルタリングする方法

C#のOfType()メソッドとは

C#のOfType()メソッドは、LINQ拡張メソッドの一つで、コレクション内の各要素の型に基づいてフィルタリングを行うための機能です。異なる型が混在するコレクションから、特定の型の要素だけを抽出したい場合に非常に便利です。

基本的な仕組み

例えば、文字列と整数が混在する以下のようなリストがあるとします。

list.Add("Katie");
list.Add(100);
list.Add(200);

このリストからstring型の要素のみを抽出するには、次のようにOfType<string>()を使用します。

var myStr = from a in list.OfType<string>() select a;

同様に、int型の要素のみを抽出したい場合は、OfType<int>()を指定します。

var myInt = from a in list.OfType<int>() select a;

OfType()メソッドの完全なサンプルコード

以下は、ArrayListに格納された文字列と整数を、それぞれの型ごとに分けて抽出し表示する完全なサンプルコードです。

サンプルコード

using System;
using System.Linq;
using System.Collections;
public class Demo {
    public static void Main() {
        IList list = new ArrayList();
        list.Add("Katie");
        list.Add(100);
        list.Add(200);
        list.Add(300);
        list.Add(400);
        list.Add("Brad");
        list.Add(600);
        list.Add(700);

        var myStr = from a in list.OfType<string>() select a;
        var myInt = from a in list.OfType<int>() select a;
        Console.WriteLine("Strings...");
        foreach (var strVal in myStr) {
            Console.WriteLine(strVal);
        }
        Console.WriteLine("Integer...");
        foreach (var intVal in myInt) {
            Console.WriteLine(intVal);
        }
    }
}

実行結果

Strings...
Katie
Brad
Integer...
100
200
300
400
600
700

まとめ

OfType()メソッドを使うことで、object型など複数の型が混在する非ジェネリックコレクション(ArrayListなど)から、指定した型の要素だけを安全かつ簡単に取り出すことができます。キャストエラーを回避しながら型安全な操作を実現できるため、レガシーなコレクションを扱う場面で特に役立ちます。

  1. C#でリストに要素を追加する方法【Addメソッドの基本と使い方】

    C#でリスト(List<T>)に新しい要素を追加するには、Add() メソッドを使用します。この記事では、リストの宣言から要素の追加、表示までの一連の流れをサンプルコード付きで解説します。 1. リストの宣言 まず、文字列型のリストを宣言します。 var teams = new List<string>(); 2. Add() メソッドで要素を追加する リストに要素を追加するには、Add() メソッドを使います。引数に追加したい値を指定するだけで、リストの末尾に順番に格納されていきます。 teams.Add(US); teams.Add(Canada); teams

  2. JavaのList.replaceAll()メソッドの使い方を解説!UnaryOperatorでリスト要素を一括置換する方法

    JavaのListインターフェースが提供するreplaceAll()メソッドは、UnaryOperator型のオブジェクトを受け取り、現在のリスト内のすべての要素に対して指定された処理を実行し、その結果で既存の値を置き換えるメソッドです。 replaceAll()メソッドの基本構文 void replaceAll(UnaryOperator<E> operator) UnaryOperatorは、同じ型の引数を1つ受け取り、同じ型の結果を返す関数型インターフェースです。つまり、リストの各要素に対して「入力と出力が同型」の変換処理を適用するのに適しています。 実装例 以下の例では、U