ContainsAsync
1. 概要
ContainsAsync は、Observable シーケンスに指定した値が含まれているかどうかを判定し、その結果を Task<Boolean> として返すオペレーターです。一致する値が見つかった時点で true を返して短絡評価を行い、購読を解除します。シーケンスが完了しても値が見つからなかった場合は false を返します。
2. シグネチャ
デフォルト等値比較による値の存在判定
csharp
public static Task<Boolean> ContainsAsync<T>(
this Observable<T> source,
T value,
CancellationToken cancellationToken = default)EqualityComparer<T>.Default を使用して、value と一致する要素がシーケンスに含まれるかを判定します。
カスタム等値比較子による値の存在判定
csharp
public static Task<Boolean> ContainsAsync<T>(
this Observable<T> source,
T value,
IEqualityComparer<T> equalityComparer,
CancellationToken cancellationToken = default)IEqualityComparer<T> を指定して、独自の等値比較ロジックで一致判定を行います。
オーバーロードの使い分け
| オーバーロード | 用途 |
|---|---|
ContainsAsync(source, value) | デフォルトの等値比較で十分な場合 |
ContainsAsync(source, value, equalityComparer) | 大文字小文字の無視など、カスタム比較が必要な場合 |
3. マーブルダイアグラム
ソースシーケンスの各要素が指定した値と比較されます。一致する要素が見つかった時点で true が返され、見つからないままシーケンスが完了すると false が返されます。
4. サンプルコード
csharp
// 値の存在確認
var source = new[] { 1, 2, 3, 4, 5 }.ToObservable();
bool contains3 = await source.ContainsAsync(3);
Console.WriteLine(contains3); // True
bool contains9 = await source.ContainsAsync(9);
Console.WriteLine(contains9); // Falsecsharp
// カスタム比較子を使用(大文字小文字を無視)
var source = new[] { "Apple", "Banana", "Cherry" }.ToObservable();
bool found = await source.ContainsAsync(
"banana",
StringComparer.OrdinalIgnoreCase);
Console.WriteLine(found); // True5. 補足
- AnyAsync と似ていますが、用途が異なります。
ContainsAsyncは 特定の値 の存在を確認し、AnyAsyncは 述語(条件関数) に一致する要素の存在を確認します。 ContainsAsync(value)はAnyAsync(x => EqualityComparer<T>.Default.Equals(x, value))と論理的に等価です。