Slide 27
Slide 27 text
話戻ってSelect/Where最適化
public static Observable Select
(this Observable source, Func selector)
{
if (source is Where where)
{
// Optimize for WhereSelect
return new WhereSelect(where.source, selector, where.predicate);
}
return new Select(source, selector);
}
public static Observable Where(this Observable source, Func predicate)
{
if (source is Where where)
{
// Optimize for Where.Where, create combined predicate.
var p = where.predicate;
return new Where(where.source, x => p(x) && predicate(x)); // lambda captured alloc
}
return new Where(source, predicate);
}
Where().Select()は一つのオペレーター
にまとめることができる
Where().Where()は一つのオペレー
ターにまとめることができる
LINQ to Objects(Enumerable)でも実装されている定番ネタです