Skip to content

AsUnitObservable

1. 概要

AsUnitObservable は、上流から流れてくる値を すべて Unit に変換 するオペレーターです。

値の中身には興味がなく、「イベントが発生したこと」だけを伝えたい場合に使用します。概念的には Select(_ => Unit.Default) と同等ですが、R3 の内部実装ではソースが既に Observable<Unit> の場合はそのまま返すなどの最適化が施されています。

2. シグネチャ

値を Unit に変換する

csharp
public static Observable<Unit> AsUnitObservable<T>(this Observable<T> source)

上流のすべての値を Unit に変換して下流へ流します。完了通知とエラー通知はそのまま伝搬されます。

csharp
source.AsUnitObservable()

3. マーブルダイアグラム

AsUnitObservable のマーブルダイアグラム

上流から 123 が流れた場合、すべて Unit に変換され、下流には () が 3 回流れます。タイミングと要素数は上流と同じです。

4. サンプルコード

csharp
using R3;

// ボタンクリックなど、値の中身に興味がないケース
var clicks = Observable.Range(1, 3);

clicks.AsUnitObservable()
    .Subscribe(_ => Console.WriteLine("イベント発生"));
// 出力:
// イベント発生
// イベント発生
// イベント発生

5. 補足

  • Select(_ => Unit.Default) でも同じ結果が得られますが、AsUnitObservable のほうがソースが既に Observable<Unit> の場合に不要なラップを避ける最適化があるため、推奨されます。