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

C#のFuncジェネリック型とは?匿名メソッドの格納方法と使い方を解説

Funcジェネリック型は、匿名メソッドやラムダ式を格納できるパラメータ化されたデリゲート型です。型パラメータのうち、最後のものが戻り値の型を表し、それ以外が引数の型を表します。これにより、処理内容を変数のように扱うことが可能になります。

以下の例では、4つのFunc型インスタンスを定義して使用します。

Func型インスタンスの定義例

1つ目:intを受け取りstringを返す型

Func<int, string> one = (p) => string.Format("{0}", p);

2つ目:boolとlongを受け取りstringを返す型

Func<bool, long, string> two = (q, p) => string.Format("{0} and {1}", q, p);

3つ目:boolとintを受け取りstringを返す型

Func<bool, int, string> three = (q, p) => string.Format("{0} and {1}", q, p);

4つ目:decimalを受け取りstringを返す型

Func<decimal, string> four = (p) => string.Format("{0}", p);

このように、Funcジェネリック型を使えば、引数の数や型・戻り値の型が異なるさまざまな処理を、統一的な記述で扱えます。なお、Funcデリゲートは最大16個まで引数の型パラメータを持つことができます。

サンプルプログラム

実際にこれらのFunc型インスタンスを定義し、呼び出して表示する完全なコードを見てみましょう。

using System;
using System.IO;

namespace Demo {
    class Program {
        static void Main(string[] args) {

            // 4つのFunc型インスタンス
            // 1つ目:intを受け取りstringを返す
            Func<int, string> one = (p) =>
            string.Format("{0}", p);

            // 2つ目:boolとlongを受け取りstringを返す
            Func<bool, long, string> two = (q, p) =>
            string.Format("{0} and {1}", q, p);

            // 3つ目:boolとintを受け取りstringを返す
            Func<bool, int, string> three = (q, p) =>
            string.Format("{0} and {1}", q, p);

            // 4つ目:decimalを受け取りstringを返す
            Func<decimal, string> four = (p) =>
            string.Format("{0}", p);

            Console.WriteLine(one.Invoke(25));
            Console.WriteLine(two.Invoke(false, 76756566));
            Console.WriteLine(three.Invoke(true, 50));
            Console.WriteLine(four.Invoke(1.2m));
        }
    }
}

Funcデリゲートの実行にはInvoke()メソッドを使用しますが、one(25)のように直接呼び出すことも可能です。

実行結果

25
False and 76756566
True and 50
1.2

このように、Funcジェネリック型を活用することで、ラムダ式として定義した処理を柔軟に呼び出せます。LINQなどでも頻繁に使われる重要な概念なので、しっかり理解しておきましょう。

  1. JavaでCLOB型を文字列(String)に変換する方法をわかりやすく解説

    CLOB(Character Large Object)は、SQLの組み込みデータ型の一つで、大量のテキストデータを格納するために使用されます。このデータ型を利用すると、最大2,147,483,647文字までのデータを保存することが可能です。 JDBC APIのjava.sql.Clobインターフェースが、このCLOBデータ型を表現します。なお、JDBCにおけるClobオブジェクトはSQLロケーター(locator)を使って実装されているため、実際のデータそのものではなく、SQL CLOBへの論理ポインターを保持している点に注意してください。 MySQLデータベースでは、TINYTEXT、T

  2. Pythonで文字列をJSONオブジェクト(辞書型)に変換する方法|json.loadsの使い方を解説

    多くのWeb APIでは、データは辞書(JSONオブジェクト)形式の文字列として送受信されます。しかし、文字列のままでは各キーや値にアクセスできないため、意味のある情報を抽出したり、さらに加工を行ったりするには、まずPythonの辞書型へ変換する必要があります。本記事では、Pythonの標準ライブラリであるjsonモジュールを使って、文字列をJSONオブジェクト(辞書型)に変換する基本的な方法を、サンプルコードと実行結果とともに解説します。json.loads()とはjsonモジュールには、以下の2つの主要な関数が用意されています。json.dumps():Pythonのオブジェクト(辞書など