Skip to content

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. マーブルダイアグラム

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

ソースシーケンスの各要素が指定した値と比較されます。一致する要素が見つかった時点で 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); // False
csharp
// カスタム比較子を使用(大文字小文字を無視)
var source = new[] { "Apple", "Banana", "Cherry" }.ToObservable();

bool found = await source.ContainsAsync(
    "banana",
    StringComparer.OrdinalIgnoreCase);
Console.WriteLine(found); // True

5. 補足

  • AnyAsync と似ていますが、用途が異なります。ContainsAsync特定の値 の存在を確認し、AnyAsync述語(条件関数) に一致する要素の存在を確認します。
  • ContainsAsync(value)AnyAsync(x => EqualityComparer<T>.Default.Equals(x, value)) と論理的に等価です。