WhereNotNull
1. 概要
WhereNotNull は、ソースシーケンスから null の要素を除外し、非 null の要素のみを通過させるフィルタリングオペレーターです。参照型(T?)および Nullable 値型(T? where T : struct)の両方に対応しており、戻り値の型が非 null 型(Observable<T>)に変換されるため、後続の処理で null チェックが不要になります。
2. シグネチャ
null 要素の除外
csharp
public static Observable<T> WhereNotNull<T>(
this Observable<T?> source)ソースシーケンスの null 要素を除外し、非 null の要素のみを Observable<T> として返します。参照型と Nullable 値型の両方で使用できます。
csharp
// null を含む文字列シーケンスから null を除外
Observable<string?> source = ...;
Observable<string> nonNull = source.WhereNotNull();3. マーブルダイアグラム
ソースシーケンスの null 要素(図中の空要素)はすべて除外され、非 null の要素のみが下流に流れます。
4. サンプルコード
csharp
using R3;
// 参照型の null 除外
var names = new string?[] { "Alice", null, "Bob", null, "Charlie" };
names.ToObservable()
.WhereNotNull() // Observable<string> が返る
.Subscribe(name => Console.WriteLine($"名前: {name}"));
// 出力:
// 名前: Alice
// 名前: Bob
// 名前: Charlie
// Nullable 値型の null 除外
var numbers = new int?[] { 1, null, 3, null, 5 };
numbers.ToObservable()
.WhereNotNull() // Observable<int> が返る
.Subscribe(n => Console.WriteLine($"数値: {n}"));
// 出力:
// 数値: 1
// 数値: 3
// 数値: 5
// Where(x => x != null) の代わりに使用すると型安全
Observable<object?> source = ...;
// source.Where(x => x != null) → Observable<object?> のまま(null の可能性が残る)
// source.WhereNotNull() → Observable<object> になる(型安全)
source.WhereNotNull()
.Subscribe(obj => Console.WriteLine(obj.ToString())); // null チェック不要