public static IObservable <T> Where <T>(this IObservable <T> source, Func <T, bool> predicate) { // optimized path WhereObservable <T> whereObservable = source as UniRx.Operators.WhereObservable <T>; if (whereObservable != null) { return(whereObservable.CombinePredicate(predicate)); } ISelect <T> selectObservable = source as UniRx.Operators.ISelect <T>; if (selectObservable != null) { return(selectObservable.CombinePredicate(predicate)); } return(new WhereObservable <T>(source, predicate)); }