Funcでデリゲート

プログラミングC# 第6版 5.7


まだまだ続きますよ!デリゲートの話です。

Funcというのがでてきました。これは戻り値がTResult型で引数がT型のデリゲートのことです。

つまり今まで出てきたActionやPredicateはこのFuncで表せることになります・・・・・、

っていうのは嘘で、Actionは無理でした。どうやらvoidは特殊らしく、T(TResult)に指定できませんでした。

Predicateはvoidが使われてないのでFuncでも表現できます。

using System;

class Program {
    public static bool Foo (int i) {
        return i % 2 == 0;
    }
    
    static void Main () {
        // 以下二つは同じデリゲート
        Predicate<int> dobj1 = Foo;
        Func<int,bool> dobj2 = Foo;
        
        Console.WriteLine( dobj1(1) );
        Console.WriteLine( dobj2(2) );
    }
}
$ main
False
True

ということでデリゲートを使う場合は基本的にはFuncとActionを使えば独自のデリゲートを用意しなくても良さそうですね。