LINQ演算子の独自実装

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


WhereやSelectを拡張メソッドに頼らずに独自に実装することでクエリ式として扱うことができます。

using System;
using System.Linq;

class Foo {
    public int id;
    
    public Foo Where (Func<Foo, bool> predicate) {
        return this;
    }
    
    public TResult Select<TResult>(Func<Foo, TResult> selector) {
        return selector(this);
    }
}

class Program {
    static void Main() {
        var foo = new Foo() { id = 1 };
        
        var ret = from f in foo where f.id == 1 select f.id;
        
        Console.WriteLine(ret);
    }
}
$ main
1

WhereとSelectを独自実装しています。ただし独自実装できるよっていうのを確認しただけの処理なので本来こういった処理は書くことはないようです。

Whereのpredicateも使わずに無視してますしね。