おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

Action, Func, Predicateデリゲートを使ってみた!

はじめに

Action, Func, Predicateデリゲートについて、使い方をざっくりまとめてみました。

あくまで使い方に全振りしたので正直なところ実用性は皆無なサンプルコードになっています(;´∀`)
使い方を理解する一助になれば幸いです。

Actionデリゲート

デリゲート 戻り値 説明
Action<T> void 一つのT型の引数を受け取り、戻り値は返さない処理を行います

今回はAction<T>を利用しましたが引数なしのActionや引数が2つのAction<T1,T2>等々、最大で引数を16個受け取るActionデリゲートまで存在します。

docs.microsoft.com

Funcデリゲート

デリゲート 戻り値 説明
Func<T,TResult> TResult 一つのT型の引数を受け取り、TResult型の戻り値を返す処理を行います

今回はFunc<T>を利用しましたが引数なしのFunc<TResult>や引数が2つのFunc<T1,T2,TResult>等々、最大で引数を16個受け取るFuncデリゲートまで存在します。

docs.microsoft.com

Predicateデリゲート

デリゲート 戻り値 説明
Predicate<T> bool 一つのT型の引数を受け取り、bool型の戻り値を返す処理を行います

こちらは...ActionやFuncみたいにたくさんデリゲートがあるわけではなさそうですね。 とりあえずこれだけのようです。

docs.microsoft.com

サンプルコード

//C#9.0以降のトップレベルステートメントを利用しています
using System;

//"Actionデリゲートを使ってみた。"という文字列をactionデリゲートが受け取り
//そのままConsoleに出力してるだけ
UseAction("Actionデリゲートを使ってみた。", o => Console.WriteLine(o));

//"Funcデリゲートを使ってみた。"という文字列をfuncデリゲートが受け取り
//そのままConsoleに出力してるだけ
UseFunc("Funcデリゲートを使ってみた。", o => o);

//"Predicateデリゲートを使ってみた。"という文字列をpredicateデリゲートが受け取り
//"Predicateデリゲートを使ってみた。"と比較して等値か確認して結果をConsoleに出力してるだけ
UsePredicate("Predicateデリゲートを使ってみた。", o => o == "Predicateデリゲートを使ってみた。");

//UseActionメソッドは引数strを受け取り、何も返さない(void)actionデリゲートを実行します。
void UseAction(string str, Action<string> action)
    => action(str);

//UseFuncメソッドは引数strを受け取り、string型の戻り値を返すfuncデリゲートを実行します。
//funcデリゲートはstring型の戻り値を返すのでその値をConsole.WriteLineで出力します。
void UseFunc(string str, Func<string, string> func) 
    => Console.WriteLine(func(str));

//UsePredicateメソッドは引数strを受け取り、bool型の戻り値を返すpredicateデリゲートを実行します。
//predicateデリゲートはbool型の戻り値を返すのでその値をConsole.WriteLineで出力します。
void UsePredicate(string str, Predicate<string> predicate)
    => Console.WriteLine(predicate(str));
Actionデリゲートを使ってみた。
Funcデリゲートを使ってみた。
True

おわりに

デリゲートって結構説明が難しいというか、一回見ただけだとなかなかイメージがわかないんですよね...。 ここは使いながら慣れていくしかないのかな(;^_^A