私はRxを初めて使用し、いくつかのサンプルを調べていて、以下に出くわしました:
Observable.FromEventPattern<RoutedEventHandler, RoutedEventArgs>(
h => new RoutedEventHandler(h),
h => Loaded += h,
h => Loaded -= h)
.Select(_ => true)
.StartWith(IsLoaded)
.Where(l => l)
.Take(1)
.Subscribe(_ => Console.WriteLine("loaded");
このステートメントを分解して、それが何をしているのかを理解しようとしていますが、100% 明確ではありません。
FromEventPatternがLoadedイベントを監視可能なシーケンスに変換する方法を理解しています。ここで、IsLoadedが true のときにSelectがトリガーされます (これが私が想定していることです)。SelectはRoutedEventArgs から情報を取得しているだけですか?
ここで、StartsWithが存在する理由がわかりません。 StartsWithは、オブザーバブル シーケンスの先頭に一連の値を追加します。IsLoadedの値をリストの先頭に追加するだけですか? Selectが発生した後、既にそこにあるのではないでしょうか?
.Whereはいかなる種類のフィルターも適用しないため、.Takeはシーケンスの最初の値のみを取得します (この場合、それ以上は使用されません)。次にサブスクライブし、コントロールがロードされたときにのみコンソールに書き込まれます。
この分析はおおむね正しいですか?
また、そのようなものをデバッグするためのヒント (つまり、チェーンのさまざまな段階でシーケンスがどのように見えるか) はありますか? デバッガーをアタッチするだけで情報を取得できますが、一般的に使用される可能性のある他のトリック/ヒントがあるかどうか疑問に思っていました。